【发布时间】:2013-12-16 21:18:15
【问题描述】:
以下内容未能返回正确的子节点,即使它实际上是在树的更远位置找到子节点。它似乎在找到孩子后放弃了它,继续搜索树的其余部分。
private Node<K, V> getNode(K key, ArrayList<Node<K, V>> children){
if (children == null) return null;
if (root.getKey().equals(key)) return root;
for (Node<K, V> child : children) {
if (child.getKey().equals(key)) return child;
getNode(key, child.getChildren());
}
return null;
}
我用以下代码对其进行了测试:
Tree<Integer, String> tree = new Tree<>(1, "1");
tree.addChild(1, new Node<>(2, "2"));
tree.addChild(1, new Node<>(3, "3"));
tree.addChild(1, new Node<>(4, "4"));
tree.addChild(2, new Node<>(5, "5"));
System.out.println(tree.addChild(5, new Node<>(6, "6")));
System.out.println(tree.addChild(5, new Node<>(7, "7")));
但是,控制台两次输出false,即使它应该是true。无法找到键为 5 的孩子,即使我在树中添加了一个。
【问题讨论】:
-
if (root.getKey().equals(key)) { return root; }应该在if (children != null)块之外
标签: java tree tree-search