2016-12-06 146 views
2

有人可以指点我的标准,经过测试的简单树实现在JavaJava树数据结构实现

例如,所有StackOverflow上搜索关于Java树引到这个话题, Tree implementation in Java (root, parents and children)

但后来你发现该主题在接受的答案不工作,并给出一个溢出异常(https://stackoverflow.com/a/40622616/1005607) - 很危险的,也许有人应该删除或编辑该答案,或者至少将其删除。

有一些非StackOverflow的资源,但再一次,我不知道他们是如何可靠, http://programtalk.com/java/java-tree-implementation/

我很难相信没有可重复使用的健壮的实现,我们可以去快。该节点应跟踪其父母和子女。应该没有错误。

+0

我使用的数据结构和算法分析Java中的马克·艾伦·韦斯,在树节有一个很好的实现树 –

回答

2

您显示的问题的问题(https://stackoverflow.com/a/40622616/1005607)是方法addChildsetParent在无限循环中互相调用。

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); 
}