【问题标题】:Traverse Binary Search Tree Pre Order recursively递归遍历二叉搜索树前序
【发布时间】:2020-09-25 16:26:23
【问题描述】:

我正在尝试以递归方式遍历 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;
}

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

【问题讨论】:

  • 字符串是不可变的。将 preOrderString 分配给递归调用返回的字符串。

标签: java recursion binary-search-tree


【解决方案1】:

在Java中,方法参数按值传递,字符串不可变

也就是说这行代码不会改变传入方法的字符串,而是创建一个新的字符串,这个字符串只能在方法的当前调用中看到:

preOrderString += root.key + " "; 

解决此问题的一种方法是使用 可变 字符串类型,例如 StringBuilder,而不是 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;
}

【讨论】:

  • 就是这样!谢谢:)
猜你喜欢
  • 2013-05-12
  • 1970-01-01
  • 2014-03-29
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
相关资源
最近更新 更多