我试图创建一个方法来收集作为参数传递的给定树中的所有节点,但似乎它没有读取任何节点的左分支。
到目前为止我开发的代码如下:
private ArrayList<T> collect(AVLTree<T> tree, AVLNode<T> tRoot, ArrayList<T> l) {
ArrayList<T> nodes = l;
if (tRoot == null)
return null;
else {
if (!nodes.contains(tRoot.element())) {
nodes.add(tRoot.element());
if (tRoot.getRight() != null) {
collect(tree, tRoot.getRight(), nodes);
return nodes;
}
else if (tRoot.getLeft() != null) {
collect(tree, tRoot.getLeft(), nodes);
return nodes;
}
}
}
return nodes;
}
希望你能帮我解决这个问题,因为我现在真的坚持了下来......
答案 0 :(得分:2)
使代码无效的两件事。
以下修复程序将起作用。
--------------------------------------------------------
method time(s) peak memory
--------------------------------------------------------
file_get_contents 0.5 2,721,576
sha1_file 1.86 142,960
mdf5_file 1.6 142,848
编辑:稍微盯着代码。存在代码冗余的地方很少。它们可以简化并清理到以下内容:
private ArrayList<T> collect(AVLTree<T> tree, AVLNode<T> tRoot, ArrayList<T> l) {
ArrayList<T> nodes = l;
if (tRoot == null)
return null;
else {
if (!nodes.contains(tRoot.element())) {
nodes.add(tRoot.element());
if (tRoot.getRight() != null) {
collect(tree, tRoot.getRight(), nodes);
}
if (tRoot.getLeft() != null) {
collect(tree, tRoot.getLeft(), nodes);
}
}
}
return nodes;
}