将二进制树的所有路径打印为0和1的字符串

时间:2015-04-10 16:01:27

标签: java recursion binary-tree

我正在尝试打印二叉树的所有路径。如果方法向左移,则应将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;
}

2 个答案:

答案 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'),也请测试...