質問

私はこの文章から学コースから約inorderフォーカストラバーサル(そのものでpancaking) バイナリーツリー (BST):

Inorderツリーのフォーカストラバーサル

描線外回りの ます。開始の左側のルート 行の外部にツリー 最後のタイムをお過ごし下さい。泊まりのツリーとして、 もので、安全かどうかわからないます。(思い りましたが、その枝ノードとして、 固体バリアになります。) ののの ノードは、この線 パス下します。の場合 迷しているときに"の下に" ノード、このノード"の 左側に"という疑問が出てきます。

この例は、使用をやや異なるツリーから以下)

tree 1

しかしい場合は、検索、googleを取得しまう相反する定義で設定します。例えば、 wikipedia例:

Tree definition

Inorderフォーカストラバーサル配列:A、B、C、 D、E、F、G、H、I (leftchild,rootnode、ノード)

それによると(もの)の定義#1においては、こう

A、B、D、C、E、F、G、H

できるものを明確に定義して正しいですか。 している可能性もありますが両方を記述する異なるフォーカストラバーサル方法なことが起こるのです。うまくるものと信じて査読あり学術文章が間違っているのは、もできません。

役に立ちましたか?

解決

私の悪い試みのこのことをどのようにすべき出来ます。alt text

ほとんどのノード直上の線を描いてい.

他のヒント

忘れての定義では、いくだけのアルゴリズム

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top