有人能指出我在Java中标准,经过测试的简单树实现吗?
例如,Java Tree上的所有StackOverflow搜索都会导致此主题, Tree implementation in Java (root, parents and children)
然后你发现该主题中的接受答案不起作用并给出溢出异常(https://stackoverflow.com/a/40622616/1005607) - 非常危险,也许有人应删除或编辑该答案或至少移动它下来。
有一些非StackOverflow资源,但我再也不知道它们有多可靠, http://programtalk.com/java/java-tree-implementation/
我发现很难相信我们可以快速实现可重用的强大实施。节点应跟踪其父节点和子节点。应该没有错误。
答案 0 :(得分:2)
您展示的问题(https://stackoverflow.com/a/40622616/1005607)的问题是方法addChild
和setParent
在无限循环中相互调用。
public void setParent(Node<T> parent) {
parent.addChild(this); // Call addChild
this.parent = parent;
}
public void addChild(Node<T> child) {
child.setParent(this); // Call setParent
this.children.add(child);
}
您需要修改如下:
// Make this method private
private void setParent(Node<T> parent) {
// Remove this line to prevent the loop
// parent.addChild(this);
this.parent = parent;
}
public void addChild(Node<T> child) {
child.setParent(this);
this.children.add(child);
}