将二叉树的所有路径打印为由 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'
)...
我正在尝试打印二叉树的所有路径。如果方法向左,它应该将 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'
)...