用全局变量递归地运行树

时间:2018-04-04 15:21:37

标签: java tree

我正在尝试按顺序获取一个包含BST树的所有元素的数组(从最小到最大)。我决定采用递归方法。我的想法是在根元素的左边然后在它的右边调用以下的辅助方法,同时将元素添加到arraylist变量(在下面的代码中看到的List)。但是,对于这种工作方法,我必须定义一个变量,可以通过对SortTree的调用(左侧和右侧)来访问该变量。我不知道该怎么做。无论如何:当使用元素{3,4,7,8,10,11,15}在bst树上调用时,下面的代码返回一个空列表;谁能帮助我理解为什么?我也愿意改进我的想法。最好不要使用全局变量。

public List<Integer> SortTree(Node node) {
    List<Integer> candidate = new ArrayList<Integer>();
    if (node.getLeft() != null) {
        SortTree(node.getLeft());
    }
    else
        {
        candidate.add(node.getValue());
        if (node.getRight() != null) {
            SortTree(node.getRight());
        }
        else
            candidate.add(node.getValue());
    }
    return candidate;
}

3 个答案:

答案 0 :(得分:0)

我无法对此进行测试,因为我没有Node课程,但您可以尝试以下方法:

public List<Integer> sortTree(Node node) {
    List<Integer> candidate = new ArrayList<>();
    sortTree(candidate, node);
    return candidate;
}

private void sortTree(List<Integer> candidate, Node node) {
    if (node.getLeft() != null) {
        sortTree(node.getLeft());
    } else {
        candidate.add(node.getValue());
        if (node.getRight() != null) {
            sortTree(node.getRight());
        } else {
            candidate.add(node.getValue());
        }
    }
}

答案 1 :(得分:0)

您应该通过子调用将列表返回添加到当前列表

public List<Integer> SortTree(Node node) {
    List<Integer> candidate = new ArrayList<Integer>();
    if (node.getLeft() != null) {
        candidate.addAll(SortTree(node.getLeft()));
    }
    else if (node.getRight() != null) {
        candidate.addAll(SortTree(node.getRight()));
    } 
    candidate.add(node.getValue());
    return candidate;
}

答案 2 :(得分:0)

这段代码适用于我自己的Node类:

  public List<Integer> sortIt(Node node) {
        return SortTree(node, new ArrayList<>());
    }

    private List<Integer> SortTree(Node node, List<Integer> result) {

        if (node.getLeft() != null) {
            SortTree(node.getLeft(), result);
        }

        result.add(node.getValue());

        if (node.getRight() != null) {
            SortTree(node.getRight(), result);
        }

        return result;
    }

sortIt方法是调用

的方法