鏈式存儲之遍歷二叉樹

二叉樹遍歷

前序遍歷:首先遍歷根節點,接着遍歷左子樹,最後遍歷右子樹。

中序遍歷:首先遍歷左子樹,接着遍歷根節點,最後遍歷右子樹。

後序遍歷:首先遍歷左子樹,接着遍歷右子樹,最後遍歷根節點。

遍歷思想:依據前序、中序、後序遍歷的特點,使用遞歸,依次對二叉樹的根節點、左子樹和右子

樹進行遍歷。

在這裏插入圖片描述
如上圖所示:

前序遍歷:1 2 4 5 3 6 7

中序遍歷:4 2 5 1 6 3 7

後序遍歷:4 5 2 6 7 3 1

代碼展示

package demo5;

public class BinaryTree {

    TreeNode root;

    //設置根節點
    public void setRoot(TreeNode root){
        this.root = root;
    }

    //獲取根節點
    public TreeNode getRoot(){
        return root;
    }

    public void frontShow() {
        if(root!=null){
             root.frontShow();
        }
    }

    public void midShow() {
        if(root!=null){
             root.midShow();
        }
    }

    public void afterShow() {
        if(root!=null){
             root.afterShow();
        }
    }
}
package demo5;

public class TreeNode {
    //節點的權
    int value;
    //左兒子
    TreeNode leftNode;
    //右兒子
    TreeNode rightNode;

    public TreeNode(int value){
        this.value = value;
    }

    //設置左兒子
    public void setLeftNode(TreeNode leftNode) {
        this.leftNode = leftNode;
    }

    //設置右兒子
    public void setRightNode(TreeNode rightNode) {
        this.rightNode = rightNode;
    }

    //前序遍歷
    public void frontShow() {
        //先遍歷當前節點的內容
        System.out.print(value+" ");
        //左節點
        if(leftNode!=null){
            leftNode.frontShow();
        }
        //右節點
        if(rightNode!=null){
            rightNode.frontShow();
        }
    }

    //中序遍歷
    public void midShow() {
        //左節點
        if(leftNode!=null){
            leftNode.midShow();
        }
        //當前節點
        System.out.print(value+" ");
        //右節點
        if(rightNode!=null){
            rightNode.midShow();
        }
    }

    //後序遍歷
    public void afterShow() {
        //左節點
        if(leftNode!=null){
            leftNode.afterShow();
        }
        //右節點
        if(rightNode!=null){
            rightNode.afterShow();
        }
        //當前節點
        System.out.print(value+" ");
    }
}
package demo5;

public class TestBinaryTree {

    public static void main(String[] args) {
        //創建一棵樹
        BinaryTree binaryTree = new BinaryTree();
        //創建一個根節點
        TreeNode root = new TreeNode(1);
        //把根節點賦給樹
        binaryTree.setRoot(root);
        //創建一個左節點
        TreeNode rootL = new TreeNode(2);
        //把新創建的節點設置爲根節點的子節點
        root.setLeftNode(rootL);
        //創建一個右節點
        TreeNode rootR = new TreeNode(3);
        //把新創建的節點設置爲根節點的子節點
        root.setRightNode(rootR);
        //爲第二層的左節點創建兩個子節點
        rootL.setLeftNode(new TreeNode(4));
        rootL.setRightNode(new TreeNode(5));
        //爲第二層的右節點創建兩個子節點
        rootR.setLeftNode(new TreeNode(6));
        rootR.setRightNode(new TreeNode(7));
        //前序遍歷樹
        System.out.print("前序遍歷:");
        binaryTree.frontShow();
        System.out.println();
        //中序遍歷樹
        System.out.print("中序遍歷:");
        binaryTree.midShow();
        System.out.println();
        //後序遍歷樹
        System.out.print("後序遍歷:");
        binaryTree.afterShow();
        System.out.println();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章