遍历遍历二叉树搜索树递归

时间:2020-06-06 13:53:30

标签: java recursion binary-search-tree

我试图递归遍历BST预购订单,但无法使其正常工作。这是我尝试过的:

public String PreOrder() {
    return preOrderStringBuild(root, "");
}

public String preOrderStringBuild(Node root, String preOrderString) {
    if (root == null) {
        return "";
    }

    preOrderString += root.key + " "; 
    preOrderStringBuild(root.left, preOrderString);
    preOrderStringBuild(root.right, preOrderString);            

    return preOrderString;
}

但这只给了我第一个元素……我在这里做错了什么吗?

1 个答案:

答案 0 :(得分:1)

在Java中,方法参数通过值传递 ,字符串是不可变的

这意味着这行代码不会更改传递给方法的字符串,而是创建一个新的字符串,该字符串只能在该方法的当前调用中看到:

preOrderString += root.key + " "; 

解决此问题的一种方法是使用像StringBuilder这样的 mutable 字符串类型而不是String。在方法外部可以看到对可变对象的更改。

public String preOrderStringBuild(Node root, StringBuilder preOrderString) {
    ...
    preOrderString.append(root.key + " "); // instead of preOrderString = ...
    ...

另一种解决此问题的方法是确保使用递归调用返回的值。按照这种方法,您甚至不需要传递正在构建的字符串。

public String preOrderStringBuild(Node root) {
    if (root == null) {
        return "";
    }

    String preOrderString = root.key + " " 
        + preOrderStringBuild(root.left) 
        + preOrderStringBuild(root.right);

    return preOrderString;
}