我正在尝试打印二叉树的所有路径。如果方法向左移,则应将0附加到返回值。如果方法正确,则应将1附加到返回值。最终产品看起来应该是这样的:
A
B 0
C 00
D 01
E 1
不幸的是我的代码只打印出零。我会假设我的方法不对,但我无法确定原因。任何帮助或建议将不胜感激。谢谢!
private static String getAllPaths(final BinaryNodeInterface<Character> root)
{
String returnVal = "";
returnVal = privateGetAllPaths(root, returnVal);
return returnVal;
}
private static String privateGetAllPaths(final BinaryNodeInterface<Character> root, String numbers){
String returnVal = "";
String tempVal;
if (root == null)
return null;
if (root != null)
returnVal += root.getData() + numbers + '\n';
tempVal = privateGetAllPaths(root.getLeftChild(), numbers += 0);
if(tempVal != null)
{
returnVal += tempVal +"0";
return returnVal;
}
tempVal = privateGetAllPaths(root.getRightChild(), numbers +=1);
if(tempVal != null)
{
return returnVal;
}
return returnVal;
}
答案 0 :(得分:2)
您的代码中有许多return
语句。完整的代码在各方面都是一塌糊涂(布局,风格等)。
public static void listPaths(BinaryNodeInterface<Character> node , StringBuilder builder , String path){
builder.append('\n');
builder.append(node.getData());
builder.append(" " + path);
if(node.getLeftChild() != null)
listPaths(node.getLeftChild() , builder , path + "0");
if(node.getRightChild() != null)
listPaths(node.getRightChild() , builder , path + "1");
}
public String listPaths(BinaryNodeInterface<Character> node){
StringBuilder builder = new StringBuilder();
listPaths(node , builder , "");
builder.deleteChar(0);//delete first char (useless '\n')
return builder.toString();
}
应该像魅力一样工作(未经测试)。
答案 1 :(得分:1)
正如法比安所说你使用了太多返回 -s。如果您的代码在左侧链接后面,则返回并跳过处理当前节点的右侧子树。
另外,您使用+=
应该是+
,因此当您最终找到合适的孩子时,numbers
将使用“01”后缀而不是“1”。< / p>
如果numbers + 0
符合您的预期(我不确定它是否等同于numbers + '0'
),也请测试...