Inorderツリーのフォーカストラバーサル:を定義して正しいですか。
-
20-08-2019 - |
質問
私はこの文章から学コースから約inorderフォーカストラバーサル(そのものでpancaking) バイナリーツリー (BST):
Inorderツリーのフォーカストラバーサル
描線外回りの ます。開始の左側のルート 行の外部にツリー 最後のタイムをお過ごし下さい。泊まりのツリーとして、 もので、安全かどうかわからないます。(思い りましたが、その枝ノードとして、 固体バリアになります。) ののの ノードは、この線 パス下します。の場合 迷しているときに"の下に" ノード、このノード"の 左側に"という疑問が出てきます。
この例は、使用をやや異なるツリーから以下)
しかしい場合は、検索、googleを取得しまう相反する定義で設定します。例えば、 wikipedia例:
Inorderフォーカストラバーサル配列:A、B、C、 D、E、F、G、H、I (leftchild,rootnode、ノード)
それによると(もの)の定義#1においては、こう
A、B、D、C、E、F、G、H
できるものを明確に定義して正しいですか。 している可能性もありますが両方を記述する異なるフォーカストラバーサル方法なことが起こるのです。うまくるものと信じて査読あり学術文章が間違っているのは、もできません。
解決
私の悪い試みのこのことをどのようにすべき出来ます。
ほとんどのノード直上の線を描いてい.
他のヒント
忘れての定義では、いくだけのアルゴリズム
void inOrderPrint(Node root)
{
if (root.left != null) inOrderPrint(root.left);
print(root.name);
if (root.right != null) inOrderPrint(root.right);
}
かつです。並べ替えのために前後にまとめました。
だをよくお読みだの"定義"とを開始 左 の根底には、ノードによって決ま 下 します。なので B
のいずれかノードとして渡ししますので、左から、 A
, その最初のパス 下 A
その後、手すりパス 下 B
.そのためこの両方の定義と同じ結果です。
個人的に見 この講演 もかなり参考になります。
両方の定義と同じ結果です。ないき 文字 最初の例では見つの数字のパスです。次の例で使用されないようにする方法は文字を表す、知りたいことは何かを投げまで行くことができる。
例えば、えおめかと思うと、第二にツリーがトラバースを使用するアルゴリズムの第一の場所"D"の"B"べきではありませんでまだまだ左ードの子ノードD(その最初の項目は"しるこの線が通過する 下 ます。"
このすることができる有用な方後..uだけを無視しないダミーまたはnullの場合ノード。gのノードGは左nullの場合ノードの..こnullの場合ノードあたっても大丈夫..
の適切なフォーカストラバーサルすることはできない。して残ることができ葉ノードはルートノード)
左ルート右
A BはNULL
C D E
Null F G
H I NULLの場合
Fはルートまたは左せん
私の最初のバイナリーツリーのルート a
はバイナリーツリーではないが正しく構築された。
を実行しようとするようにすべての左側のツリーのルートの右側のツリーは以上のタイムをお過ごし下さい。
それによると(もの) 定義に#1においては、こう
A, B, D, C, E, F, G, I, H
残念ながら、様のご理解が間違っている。
場に到着するまでのノードが必要に下りて、左のノードに現在のノードを、見てすぐにノードです。使用する場合Dの前にC、なんでしょうかを降りて左側にノードです。
こんにちはによってwikiは正しいの配列をinorderフォーカストラバーサルでは左ルートです。
まで、A、B、C、D、E、Fさんが理解しています。今後根F、次のノードはGんhav左のノードが右ノードのようにルール(左ルート-右)、null-g-。今はノードGさんには左のノード、このフォーカストラバーサルするGHI.これは正しい。
武器agiは、dexで下がらないboxerぐ.
のためのインラインツリーのフォーカストラバーサルだということを考慮しておくのフォーカストラバーサルでは左側のノードにする小パッケージです。上記の図る葛藤に、エラーが発生したときを読む親ノードの前に読みず葉子どもたちから提示されたノードのすべてにおいて理由があります。
の適切なフォーカストラバーサルすることはできない。して残ることができ葉ノード(A)に戻った親ノード(B)、右が、Dは子供の左側を動かして、(C)、Cの親(D)、Dの右の子(E)、逆に立ち戻ってコンピュータ(F)は右葉(G)、Gの葉のなかには、左葉ノードの移動が(H) 戻り親になっていまいます。
上記のフォーカストラバーサルを読み込み時のノードしています場括弧.
パッケージdatastructure;
公共のクラスBinaryTreeTraversal{
public static Node<Integer> node;
public static Node<Integer> sortedArrayToBST(int arr[], int start, int end) {
if (start > end)
return null;
int mid = start + (end - start) / 2;
Node<Integer> node = new Node<Integer>();
node.setValue(arr[mid]);
node.left = sortedArrayToBST(arr, start, mid - 1);
node.right = sortedArrayToBST(arr, mid + 1, end);
return node;
}
public static void main(String[] args) {
int[] test = new int[] { 1, 2, 3, 4, 5, 6, 7 };
Node<Integer> node = sortedArrayToBST(test, 0, test.length - 1);
System.out.println("preOrderTraversal >> ");
preOrderTraversal(node);
System.out.println("");
System.out.println("inOrderTraversal >> ");
inOrderTraversal(node);
System.out.println("");
System.out.println("postOrderTraversal >> ");
postOrderTraversal(node);
}
public static void preOrderTraversal(Node<Integer> node) {
if (node != null) {
System.out.print(" " + node.toString());
preOrderTraversal(node.left);
preOrderTraversal(node.right);
}
}
public static void inOrderTraversal(Node<Integer> node) {
if (node != null) {
inOrderTraversal(node.left);
System.out.print(" " + node.toString());
inOrderTraversal(node.right);
}
}
public static void postOrderTraversal(Node<Integer> node) {
if (node != null) {
postOrderTraversal(node.left);
postOrderTraversal(node.right);
System.out.print(" " + node.toString());
}
}
}
パッケージdatastructure;
公共のクラスのノードは{
E value = null;
Node<E> left;
Node<E> right;
public E getValue() {
return value;
}
public void setValue(E value) {
this.value = value;
}
public Node<E> getLeft() {
return left;
}
public void setLeft(Node<E> left) {
this.left = left;
}
public Node<E> getRight() {
return right;
}
public void setRight(Node<E> right) {
this.right = right;
}
@Override
public String toString() {
return " " +value;
}
}
preOrderTraversal>> 4 2 1 3 6 5 7 inOrderTraversal>> 1 2 3 4 5 6 7 postOrderTraversal>> 1 3 2 5 7 6 4
void
inorder (NODE root)
{
if (root != NULL)
{
inorder (root->llink);
printf ("%d\t", root->info);
inorder (root->rlink);
}
}
この最も簡単なアプローチを再帰的に定義するフォーカストラバーサルは、この関数を呼び出の主な機能を取得するフォーカストラバーサルを指定のバイナリーです。
正しいのでし予約限定の、ntのためのinorder