2012-02-16 90 views
1

我正在做一个定制编码BST的树遍历。下面的代码目标C递归问题?

-(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]; 
    } 
} 

试图编译这个时候我收到各类可怕错误消息。我知道这可能只是一个错误的地方,但一些同行评审会很好。我一直在搅动这个

谢谢。 - 亚历

回答

0

代码中的语法在多处出现错误。要使用多个参数,需要扩展函数名称以为每个参数提供参数描述。你可能想改变它的东西是这样的:

- (空)inOrderTraversalToString:(的NSString *)accumulateString FROMNODE:(节点*)ptrNode

函数体中,你正在做功能调用不正确。函数调用应该如下所示:

[object/class param_desc:(Param1Type)param1 param_desc:(Param2Type)param2 ...];

如果您要调用静态类方法,请首先调用类名称,否则使用您正在操作的对象名称。因此,在您的代码中,第一次递归调用可能如下所示:

[YourObjectOrClass inOrderTraversalToString:accumulateString FromNode:ptrNode.left];

您可能要刷上目标C的基础退房

0

你的方法的签名似乎是错误的,它应该是这样的:

param_description:(param_type) parameter param2_description:(param2_type) parameter2 

尝试类似:

- (void) inOrderTraversalToString:(NSString*) accumulateString node:(Node*) ptrNode 

再有就是你打电话给你的方法途径;一般语法如下:

[object method]; 
[object method2:arg1 argname2:arg2]; 

我建议你读了一些基本的介绍客观-C,因为你的基础知识挣扎。

1

你的代码远不是合法的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]; 
} 

此代码假定leftrightdatum真的是你Node类的属性,而accumulatedString一直呼吁在此之前初始化一些合理方法。

+0

也许不如说是不支持重载。它只是不是该语言的一个特征。 – ThomasW 2012-02-16 04:15:52

+0

我真的没有看到语义上的差异。 – UIAdam 2012-02-16 04:17:15

+0

这是一个微小的区别,但'不允许'听起来像是被禁止或明确排除的东西,但我相信更准确地说它根本不被支持。 – ThomasW 2012-02-16 04:19:52

0

调用方法时需要使用self。因此类似:

[self inOrderTraversalToString : accumulateString : ptrNode.left];