課題があり、方法について助けが必要です。
だから私はこのような木を持っています:
A
/ \
B C
/ \ / \
D E F G
/ \
H I
/ \
J K
私の方法は次のとおりです。
public BinaryTree preorderNext(BinaryTree t, BinaryTree v, BinaryTree prev) {
prev = t;
if(t.getLeft() != null) {
preorderNext(t.getLeft(), v, prev);
}
if(t.getRight() != null) {
preorderNext(t.getRight(), v, prev);
}
if(prev == v) {
return t;
}
return null;
}
講師はツリーの簡単な実装を行っていました。このクラスは BinaryTree と呼ばれ、それにノードをリンクさせたい場合は、右と左の子 BinaryTree ノードが何であるかを指定します。
ノードには 2 つのリンク (1 つは左の子、もう 1 つは右の子) があり、ヘッドへのリンクはありません。
したがって、現在の方法で事前注文トラバーサルを成功させることができるので、ノードに格納されている要素の印刷ステートメントを記述してテストしました。
しかし、テストを実行すると、A からの次の事前注文ノードは B であり、K からの次の事前注文ノードは null 例外をスローしますが、それは I である必要があります。
私が間違っている場所のアイデアはありますか? 変数 prev は、最後に訪れたノードへの参照を保持する必要があるため、ノード v (v の後にノードを返すために指定したノード) に等しい場合、次のノードを取得するべきではありませんか?