二元樹可以利用連結串列或陣列來表示

鏈結串列可以直接定義parent、left、right三種變數來紀錄父節點和子節點
陣列擺放節點有一定的公式,且陣列[0]不使用

父節點 = floor(index / 2)
左子節點 = index * 2
右子節點 = index * 2 + 1

Java陣列二元樹走訪

public class btree {
    private static int [] tree_arr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    public static void main(String [] argv) {
        btree.preorder(1);
        System.out.println();
        btree.inorder(1);
        System.out.println();
        btree.postorder(1);
    }

    //前序 樹根 > 左子樹 > 右子樹(DFS深度優先)
    public static void preorder(int index) {
        if (index < tree_arr.length) {
            System.out.println(tree_arr[index]);
            btree.preorder(index * 2);
            btree.preorder(index * 2 + 1);
        }
    }

    //中序 左子樹 > 樹根 > 右子樹
    public static void inorder(int index) {
        if (index < tree_arr.length) {
            btree.preorder(index * 2);
            System.out.println(tree_arr[index]);
            btree.preorder(index * 2 + 1);
        }
    }

    //後序 左子樹 > 右子樹 > 樹根
    public static void postorder(int index) {
        if (index < tree_arr.length) {
            btree.preorder(index * 2);
            btree.preorder(index * 2 + 1);
            System.out.println(tree_arr[index]);
        }
    }
}
Categories: DataStructure