私は次の木を与えられました:
そして、3つの実装を変更するために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などのメソッドを作成するにはどうすればよいですか?
過度に冗長な説明でごめんなさい。