漢諾塔+二叉樹(前序,中序,後序)

   /**
     * 漢諾塔
     *
     * @param n      盤子的個數
     * @param start  開始的柱子
     * @param middle 中介柱子
     * @param end    結果柱子
     */
    public static void towerOfHanoi(int n, int start, int middle, int end) {
        if (n <= 1) {
            System.out.println(start + "----->" + end);
        } else {
            towerOfHanoi(n - 1, start, end, middle);
            System.out.println(start + "----->" + end);
            towerOfHanoi(n - 1, middle, start, end);
        }
    }

測試打印結果:

 二叉樹

 Node<String> root = new Node<>(null, null, null);

    /**
     * 中序訪問樹的所有節點
     */
    public void midOrderTraverse(Node root) {//邏輯
        if (root == null) {
            return;
        }
        //LDR
        midOrderTraverse(root.leftChild);//邏輯
        System.out.println("mid:" + root.data);//輸出
        midOrderTraverse(root.rightChild);//邏輯
    }

    /**
     * 前序訪問樹的所有節點  
     */
    public void preOrderTraverse(Node root) {
        if (root == null) {
            return;
        }
        //DLR
        System.out.println("pre:" + root.data);
        preOrderTraverse(root.leftChild);
        preOrderTraverse(root.rightChild);
    }

    /**
     * 後序訪問樹的所有節點
     */
    public void postOrderTraverse(Node root) {
        if (root == null) {
            return;
        }
        //LRD
        postOrderTraverse(root.leftChild);
        postOrderTraverse(root.rightChild);
        System.out.println("post:" + root.data);
    }


    /**
     * 節點
     */
    public static class Node<T> {
        T data;
        Node<T> leftChild;
        Node<T> rightChild;

        public Node(T data, Node<T> leftChild, Node<T> rightChild) {
            this.data = data;
            this.leftChild = leftChild;
            this.rightChild = rightChild;
        }
    }

前序   (DLR)

    若二叉樹爲空,則空操作返回,否則先訪問跟結點,然後前序遍歷左子樹,再前序遍歷右子樹

   

 中序   (LDR)

        若樹爲空,則空操作返回,否則從根結點開始(注意並不是先訪問根結點),
中序遍歷根結點的左子樹,然後是訪問根結點,最後中序遍歷右子樹

後續    (LRD)

      若樹爲空,則空操作返回,否則從左到右先葉子後結點的方式遍歷訪問左右子樹,最後是訪問根結點

 

注:上述只貼出了部分代碼和圖,可能需要有點基礎的同學。 

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