我得到了以下树:
然后我们被告知使用 last-child/previous-sibling 方法来改变这三个的实现。结果如下:
我现在正在研究 Java 实现以在这棵树上执行不同的功能。我们有一个 Tree 接口和一个 TreeNode 接口。它们都有许多我们要填写的功能。
节点是这样创建的:
MyTreeNode a = new MyTreeNode ("a");
以这种方式创建树(带有根):
MyTree tree = new MyTree (a);
最后,节点被赋予兄弟姐妹,如下所示:
e.setChild(j);
e.setSibling(d);
我已经编写了 setChild、setSibling、getNextSibling、getFirstChild 和 getChildren 的方法。例如,这是 getChildren 的代码:
public List getChildren ()
{
List <MyTreeNode> children = new ArrayList <MyTreeNode> ();
MyTreeNode x = this.child;
children.add(x);
while (x != null && x.sibling != null) {
x = x.sibling;
children.add(x);
}
return children;
}
我现在完全不知道如何编写节点子树的高度、深度、大小、getPreOrder、getPostOrder 和树大小的方法。
由于树现在处于这种不同的表示中,我不确定如何编写递归方法来检查节点的高度或深度。通常,据我了解,您会递归检查左/右子树..但现在没有(据我所知)。我能想到的唯一方法是使用许多 if 语句和 while 循环遍历每个节点。但这不是最好的方法。
如何使用树的这种实现递归地编写这些方法?
另外,我不确定如何获取有关整个树的详细信息,因为节点不会以任何方式存储在一起。它们是按照我上面展示的方式实现的,所以我不确定如何集体收集有关所有节点的数据。
如何在整个树的所有节点上创建树大小、isEmpty 或 makeEmpty 等方法?
抱歉,解释过于冗长。