數據結構 - 順序存儲二叉樹(前序中序後序遍歷)

在這裏插入圖片描述

就是邏輯上是二叉樹,物理上是一個數組

在這裏插入圖片描述

需求

在這裏插入圖片描述

package tree;

public class ArrayBinaryTreeDemo {
    public static void main(String[] args) {
        int arr [] = {1, 2, 3, 4, 5, 6, 7};
        ArrayBinaryTree arrayBinaryTree = new ArrayBinaryTree(arr);
        //arrayBinaryTree.preOrder();
        //arrayBinaryTree.infixOrder();
        arrayBinaryTree.postOrder();
    }
}
//編寫一個ArrayBinaryTree,實現順序存儲二叉樹
class ArrayBinaryTree{
    private int [] arr; //存儲數據節點的數組

    public ArrayBinaryTree(int[] arr) {
        this.arr = arr;
    }

    //重載preOrder()
    public void preOrder(){
        this.preOrder(0);
    }

    //重載infixOrder()
    public void infixOrder(){
        this.infixOrder(0);
    }

    //重載postOrder()
    public void postOrder(){
        this.postOrder(0);
    }
    //編寫一個方法,完成順序存儲二叉樹前序遍歷
    /**
     *
     * @param index 數組下標
     */
    public void preOrder(int index){
        //如果數組爲空,或者arr.length = 0;
        if (arr == null || arr.length == 0){
            System.out.println("數組爲空,不能遍歷");
            return;
        }
        //輸出當前元素
        System.out.println(arr[index]);
        //向左遞歸遍歷
        if ( (index * 2 + 1) < arr.length){
            preOrder(2 * index + 1);
        }
        if ((index * 2 + 2) < arr.length){
            preOrder(index * 2 + 2);
        }
    }

    //中序遍歷
    public void infixOrder(int index){
        if (arr == null || arr.length == 0){
            System.out.println("數組爲空,不能遍歷");
            return;
        }
        if ((index * 2 + 1) < arr.length){
            infixOrder(index * 2 + 1);
        }
        System.out.println(arr[index]);
        if ((index * 2 + 2)<arr.length){
            infixOrder(index * 2 + 2);
        }
    }

    //後序遍歷
    public void postOrder(int index){
        if (arr == null || arr.length == 0){
            System.out.println("數組爲空,不能遍歷");
            return;
        }
        if ((index * 2 + 1) < arr.length){
            infixOrder(index * 2 + 1);
        }
        if ((index * 2 + 2)<arr.length){
            infixOrder(index * 2 + 2);
        }
        System.out.println(arr[index]);
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章