我有一个递归函数,旨在解析树并将树节点的所有值存储在NSString中。
下面的算法是否正确?
NSString* finalString = [self parseTree:rootNode string:@""];
-(NSString*)parseTree:(Node*)currentNode string:(NSMutableString*)myString
{
[myString appendText:currentNode.value];
for(int i=0;i<[currentNode.children length];i++){
return [self parseTree:[currentNode.children] objectAtIndex:i] string:myString];
}
}
答案 0 :(得分:9)
不,不是。
@""
作为起始字符串。但是,@""
不是NSMutableString
。这肯定会在运行时产生异常。return
,那么该方法就会停止,你就不再执行了。这意味着你经历了循环的第一次迭代,你将停止。永远。appendText:
这样的方法。你可能意味着appendString:
这是另一个问题:为什么你需要返回一个值?你正在传递一个NSMutableString
并修改它,那么为什么不只是总是在适当的位置修改它而不用打扰返回值?例如:
- (void) parseTree:(Node*)currentNode string:(NSMutableString*)myString {
[myString appendString:currentNode.value];
for(Node * child in [currentNode children]){
[self parseTree:child string:myString];
}
}
然后用:
调用它NSMutableString * finalString = [NSMutableString string];
[self parseTree:aNode string:finalString];