将二叉树的所有路径打印为由 0 和 1 组成的 s 字符串

Printing all paths of Binary Tree as a s String of 0s and 1s

我正在尝试打印二叉树的所有路径。如果方法向左,它应该将 0 附加到 return 值。如果该方法正确,它应该将 1 附加到 return 值。最终产品应如下所示:

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

您的代码中有许多 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();
}

应该很有魅力(未测试)。

正如 fabian 所说,您使用了太多 return-s。如果你的代码跟在左 link 之后,那么你 return 并跳过处理当前节点的右子树。

此外,您使用 += 应该是 +,因此当您最终转到右侧 child 时,numbers 将具有“01”后缀的“1”。

还要测试 numbers + 0 是否符合您的预期(我不确定它是否等同于 numbers + '0')...