2

私のAVLツリーは、整数の2次元配列を使用してJavaで実装されていますavlTree[35][5]-列は次のことを表しています。

  • [0]-左の高さ
  • [1]-左の子
  • [2]-データ
  • [3]-右の子
  • [4]-右の高さ。

メインプログラムから次のメソッドを呼び出しています。その結果、3つのノードが取得されます。左端のノードの後に​​親が2回続きます。

public void inorderTraversal(int root) {
    if ((Main.avlTree[root][1] == 0) && (Main.avlTree[root][3] == 0)) {
        System.out.println(Main.avlTree[root][2]);
    } else {
        if (Main.avlTree[root][1] != 0) {
            root = Main.avlTree[root][1];
            inorderTraversal(root);
        }
        System.out.println(Main.avlTree[root][2]);

        if (Main.avlTree[root][3] != 0) {
            root = Main.avlTree[root][3];
            inorderTraversal(root);
        }
    }
}
4

1 に答える 1

1

私はこのテストプログラムを書きました:

public class AVLTree {

    /*
        [0] - Height Left
        [1] - Left Child
        [2] - Data
        [3] - Right Child
        [4] - Height Right.
    */
    private static int[][] avlTree;

    public static void main(String[] args) {
        avlTree = new int[4][5];

        // root (L: 1; R: 3)
        avlTree[0][0] = 0;
        avlTree[0][1] = 1;
        avlTree[0][2] = 3005;
        avlTree[0][3] = 2;
        avlTree[0][4] = 1;

        // parent: root (L: -1; R: -1)
        avlTree[1][0] = 0;
        avlTree[1][1] = -1;
        avlTree[1][2] = 73375;
        avlTree[1][3] = -1;
        avlTree[1][4] = 0;

        // parent: root (L: 3; R: -1)
        avlTree[2][0] = 0;
        avlTree[2][1] = 3;
        avlTree[2][2] = 831954;
        avlTree[2][3] = -1;
        avlTree[2][4] = 0;

        // parent: 2 (L: -1; R: -1)
        avlTree[3][0] = 0;
        avlTree[3][1] = -1;
        avlTree[3][2] = 7485;
        avlTree[3][3] = -1;
        avlTree[3][4] = 0;

        inOrder(0);
    }

    private static void inOrder(int root) {
        if(root == -1) {
            // nothing to do
            return ;
        }

        // call function with left child
        inOrder( avlTree[root][1] );

        // print root
        System.out.println( avlTree[root][2]);

        // call function with right child
        inOrder( avlTree[root][3]);
    }
}

出力は期待どおりです。

73375
3005
7485
831954

あなたのコードにも問題はありません。私のテストでは問題なく動作します。多分あなたの木は間違っていますか?何もない場合は、右/左の子として -1 を使用することもお勧めします。そうしないと、0 が位置 0 のノードを意味する可能性があるため、少し誤解を招く可能性があります。

于 2012-01-13T15:19:39.763 に答える