我正在尝试按顺序获取一个包含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;
}
答案 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方法是调用
的方法