我知道正在搜索的节点位于未排序的二叉树中,但我无法弄清楚如何通过递归调用传回我的路径。我的两个函数:一个找到特定节点的路径,另一个返回一个到所有节点的路径串。 0表示采用左路径,1表示右路。
private static String getAllPaths(final BinaryNodeInterface<Character> root)
{
// TO DO
String path = "";
String returnStr = "";
return getAP(root, path, returnStr);
}
private static String getAP(BinaryNodeInterface<Character> root, String path,
String returnStr)
{
returnStr += "" + root.getData() + " " + path + "\n";
if(root.hasLeftChild())
getAP( root.getLeftChild(), path.concat("0"), returnStr);
if(root.hasRightChild())
getAP( root.getRightChild(), path.concat("1"), returnStr);
return returnStr;
}
private static String getPathTo(final BinaryNodeInterface<Character> root, char c)
{
// TO DO
String path = "";
if( root.getData() == c )
return path;
if( root.hasLeftChild() )
{
String s = getPathTo(root.getLeftChild(), c);
if( s != null )
{
path += "0";
path += s;
return path;
}
}
if( root.hasRightChild() )
{
String s = getPathTo(root.getRightChild(), c);
if( s != null )
{
path += "1";
path += s;
return path;
}
}
return null;
}
我在递归时非常糟糕,所以非常感谢任何帮助。我把这一切都搞定了。以上代码现在很好。谢谢你的帮助。
答案 0 :(得分:0)
字符串在java中是不可变的。将String
传递给方法时,会创建一个全新的值。例如:
void modifyString(String x) {
x += "(modified)";
}
如果您使用以下方法:
String s = "myString!";
modifyString(s);
// what does s equal?
您可能期望s == "myString!(modified)"
,但这不是真的。
在您的情况下,您将returnStr
作为参数传递给getAP
的递归调用。但是,它不会像您假设的那样进行修改。要修复它,请将递归方法调用的结果追加到本地returnStr
并返回。
// removed returnStr as a parameter
private static String getAP(BinaryNodeInterface<Character> root, String path)
{
String returnStr = "" + root.getData() + " " + path + "\n";
if(root.hasLeftChild())
returnStr += getAP( root.getLeftChild(), path.concat("0"));
if(root.hasRightChild())
returnStr += getAP( root.getRightChild(), path.concat("1"));
return returnStr;
}
我瞥了一眼你的getPT
方法,我实际上并没有看到任何明显的问题。