我正在对自定义编码的 BST 进行有序树遍历。这是代码
-(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];
}
}
我在尝试编译时收到各种糟糕的错误消息。我知道这可能只是某个地方的错字,但一些同行评审会很好。 几天,我一直在为此苦苦思索。
谢谢。 -- 亚历克斯
最佳答案
您的代码远非合法的 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
确实是您的 Node
类的属性,并且在调用此方法之前,accumulatedString
已被初始化为合理的值。
关于objective-c - Objective C 递归问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9305368/