Objective c 目标C递归问题?
我正在对自定义编码的BST进行顺序树遍历。下面是代码Objective c 目标C递归问题?,objective-c,ios,recursion,binary-search-tree,Objective C,Ios,Recursion,Binary Search Tree,我正在对自定义编码的BST进行顺序树遍历。下面是代码 -(void) inOrderTraversalToString : (NSString*) accumulateString : (Node*) ptrNode { if(ptrNode == nil) { return; } else { [inOrderTraversalToString : accumulateString : ptrNode.left]; accumul
-(void) inOrderTraversalToString : (NSString*) accumulateString : (Node*) ptrNode {
if(ptrNode == nil) {
return;
} else {
[inOrderTraversalToString : accumulateString : ptrNode.left];
accumulateString += [[NSNumber : ptrNode.datum] stringValue];
[inOrderTraversalToString : (NSString*) accumulateString, ptrNode.right];
}
}
当我试图编译这个时,会收到各种可怕的错误消息。我知道这可能只是某个地方的打字错误,但一些同行评议会很好。这件事我已经忙了好几天了
谢谢。
--Alex您的方法签名似乎有误,应该是这样的:
param_description:(param_type) parameter param2_description:(param2_type) parameter2
[object method];
[object method2:arg1 argname2:arg2];
尝试以下方法:
- (void) inOrderTraversalToString:(NSString*) accumulateString node:(Node*) ptrNode
[self inOrderTraversalToString : accumulateString : ptrNode.left];
然后是你调用方法的方式;通常,语法如下所示:
param_description:(param_type) parameter param2_description:(param2_type) parameter2
[object method];
[object method2:arg1 argname2:arg2];
我建议您阅读一些objective-C的基本介绍,因为您正在努力学习基础知识。您的方法签名似乎是错误的,应该是这样的:
param_description:(param_type) parameter param2_description:(param2_type) parameter2
[object method];
[object method2:arg1 argname2:arg2];
尝试以下方法:
- (void) inOrderTraversalToString:(NSString*) accumulateString node:(Node*) ptrNode
[self inOrderTraversalToString : accumulateString : ptrNode.left];
然后是你调用方法的方式;通常,语法如下所示:
param_description:(param_type) parameter param2_description:(param2_type) parameter2
[object method];
[object method2:arg1 argname2:arg2];
我建议您阅读一些有关objective-C的基本介绍,因为您正在努力学习基础知识。您的代码与法定的objective-C相去甚远。没有为NSString定义+运算符(并且不允许重载)。NSString无论如何都不会与递归一起工作,因为它是不可变的。您必须使用NSMutableString。您也没有正确地调用或声明方法 以下是一个正确版本的尝试:
- (void)inOrderTraversalToString:(NSMutableString *)accumulateString withNode:(Node *)node
{
if(ptrNode == nil) return;
[self inOrderTraversalToString:accumulatedString withNode:ptrNode.left];
[accumulatedString appendString:[ptrNode.datum stringValue]];
[self inOrderTraversalToString:accumulatedString withNode:ptrNode.right];
}
此代码假定
left
、right
和datum
确实是节点
类的属性,并且累计字符串
在调用此方法之前已初始化为合理的值。您的代码远离法律目标C。未为NSString定义+运算符(并且不允许重载)。NSString无论如何都不能用于递归,因为它是不可变的。您必须使用NSMutableString。您也没有正确调用或声明方法
以下是一个正确版本的尝试:
- (void)inOrderTraversalToString:(NSMutableString *)accumulateString withNode:(Node *)node
{
if(ptrNode == nil) return;
[self inOrderTraversalToString:accumulatedString withNode:ptrNode.left];
[accumulatedString appendString:[ptrNode.datum stringValue]];
[self inOrderTraversalToString:accumulatedString withNode:ptrNode.right];
}
此代码假定
left
、right
和datum
确实是节点
类的属性,并且累计字符串
在调用此方法之前已初始化为合理的值。调用方法时需要使用self
。例如:
- (void) inOrderTraversalToString:(NSString*) accumulateString node:(Node*) ptrNode
[self inOrderTraversalToString : accumulateString : ptrNode.left];
调用方法时需要使用
self
。例如:
- (void) inOrderTraversalToString:(NSString*) accumulateString node:(Node*) ptrNode
[self inOrderTraversalToString : accumulateString : ptrNode.left];
代码中的语法在几个地方出现错误。若要使用多个参数,您需要扩展函数名,以便为每个参数提供参数说明。您可能希望将其更改为以下内容:
param_description:(param_type) parameter param2_description:(param2_type) parameter2
[object method];
[object method2:arg1 argname2:arg2];
-(void)inOrderTraversalToString:(NSString*)累加器从节点开始:(节点*)ptrNode
在函数体中,函数调用不正确。函数调用应如下所示:
[对象/类参数描述:(参数1类型)参数1参数描述:(参数2类型)参数2…]
如果要调用静态类方法,请首先使用类名进行调用,否则请使用正在操作的对象名。因此,在代码中,第一个递归调用可能如下所示:
param_description:(param_type) parameter param2_description:(param2_type) parameter2
[object method];
[object method2:arg1 argname2:arg2];
[YourObjectOrClass inOrderTraversalToString:AccumerateString FromNode:ptrNode.left]
你可能想温习一下目标C的基本知识
param_description:(param_type) parameter param2_description:(param2_type) parameter2
[object method];
[object method2:arg1 argname2:arg2];
-(void)inOrderTraversalToString:(NSString*)累加器从节点开始:(节点*)ptrNode
在函数体中,函数调用不正确。函数调用应如下所示:
[对象/类参数描述:(参数1类型)参数1参数描述:(参数2类型)参数2…]
如果要调用静态类方法,请首先使用类名进行调用,否则请使用正在操作的对象名。因此,在代码中,第一个递归调用可能如下所示:
param_description:(param_type) parameter param2_description:(param2_type) parameter2
[object method];
[object method2:arg1 argname2:arg2];
[YourObjectOrClass inOrderTraversalToString:AccumerateString FromNode:ptrNode.left]
你可能想温习一下目标C的基本知识