【发布时间】:2019-07-31 15:05:35
【问题描述】:
我一直在寻找一种符合我需求的良好的非二叉树实现,但还没有找到。
我需要一个非二叉树,其中孩子的数量是任意的,并且可以遍历。这棵树是由用户输入构建的,所以我需要进行循环检查。其他功能包括删除节点(及其子节点)、遍历以获取节点的子节点(和子节点的子节点)以及添加子节点(和其他树)。
我在网上找到的实现示例包括使用 firstchild-nextsibling 方法和指向节点的父子链接。 firstchild-nextsibling 方法的问题是将树和节点添加到树中。父子方法似乎是合理的,但我还没有找到任何将整棵树添加为子树并进行循环检查的实现。
这种实现的一个例子:
A
/ \
U W
然后用户选择创建另一棵树:
B
/ \
X R
然后将 B 添加为 W 的子级。完整的树将是:
A
/ \
U W
\
B
/ \
X R
如果有更好的方法来实现这种数据结构,那么我会很高兴听到它,因为我想不出其他任何东西。任何帮助将不胜感激。谢谢!
编辑:我写的一些代码。
public class TreeNode<T> {
private T data;
private TreeNode<T> firstChild;
private TreeNode<T> nextSibling;
private TreeNode<T> parent;
public TreeNode(T data) {
this.data = data;
}
public boolean isRoot() {
return this.parent == null;
}
public boolean isaLeaf() {
return this.firstChild == null;
}
public TreeNode<T> getFirstChild(){
return firstChild;
}
public void addChild(TreeNode<T> child) {
child.parent = this;
if (this.firstChild == null) {
this.firstChild = child;
} else {
child.nextSibling = firstChild;
firstChild = child;
}
}
public TreeNode<T> getParent(){
return parent;
}
public TreeNode<T> getNextSibling() {
return nextSibling;
}
public T getData() {
return data;
}
}
编辑 2:我的树允许添加类似的节点,但它不允许创建无限循环。这种循环的一个示例是将 W 添加为 R 的子级。我正在考虑将每个级别作为链接列表以便于排序,但我不确定这是否有意义。有什么想法吗?
【问题讨论】:
-
到目前为止您尝试过什么?可以贴一下你已经启动的java代码吗?
-
@LaksithaRanasingha 我添加了一些代码。我知道这并不多,但这就是我现在所拥有的。
标签: java data-structures tree