1. 程式人生 > 其它 >二叉樹前序中序後序遍歷

二叉樹前序中序後序遍歷

二叉樹遍歷:

  1. 建立一棵二叉樹
  2. 前序遍歷
    1. 先輸出當前節點(初始的時候是root節點)
    2. 如果左節點不為空,則遞迴繼續前序遍歷
    3. 如果右子節點不為空,則遞迴繼續前序遍歷
  3. 中序遍歷
    1. 如果當前節點的左子節點不為空,則遞迴中序遍歷
    2. 輸出當前節點
    3. 如果當前節點的右子節點不為空,則遞迴中序遍歷
  4. 後序遍歷
    1. 如果當前節點的左子節點不為空,則遞迴後序遍歷
    2. 如果當前節點的右子節點不為空,則遞迴右子節點
    3. 輸出當前節點
package tree;

public class BinaryTreeDemo {
    public static void main(String[] args) {
        // 建立二叉樹
        BinaryTree binaryTree = new BinaryTree();
        // 建立需要的節點
        Node1 root = new Node1(1,"a1");
        Node1 n2 = new Node1(2,"a2");
        Node1 n3 = new Node1(3,"a3");
        Node1 n4 = new Node1(4,"a4");
        // 說明,我們先手動建立二叉樹,後面使用遞迴建立二叉樹
        root.setLeft(n2);
        root.setRight(n3);
        n3.setRight(n4);
        binaryTree.setRoot(root);
        // 測試
        System.out.println("前序遍歷:");
        binaryTree.preOrder(); // 1 2 3 4
        System.out.println("中序遍歷 ");
        binaryTree.infixOrder(); // 2 1 3 4
        System.out.println("後序遍歷:");
        binaryTree.postOrder(); // 2 4 3 1
    }
}
class BinaryTree{
    private Node1 root;

    public Node1 getRoot() {
        return root;
    }

    public void setRoot(Node1 root) {
        this.root = root;
    }

    // 前序遍歷
    public void preOrder(){
        if (this.root != null){
            this.root.preOrder();
        }else{
            System.out.println("二叉樹為空");
        }
    }
    // 中序遍歷
    public void infixOrder(){
        if (this.root != null){
            this.root.infixOrder();
        }else{
            System.out.println("二叉樹為空");
        }
    }
    // 後序遍歷
    public void postOrder(){
        if (this.root != null){
            this.root.postOrder();
        }else{
            System.out.println("二叉樹為空");
        }
    }
}
// 先建立節點
class Node1{
    private int id;
    private String name;
    private Node1 left;
    private Node1 right;

    public Node1(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Node1 getLeft() {
        return left;
    }

    public void setLeft(Node1 left) {
        this.left = left;
    }

    public Node1 getRight() {
        return right;
    }

    public void setRight(Node1 right) {
        this.right = right;
    }

    @Override
    public String toString() {
        return "Node1{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
    // 編寫前序遍歷
    public void preOrder(){
        System.out.println(this); //  先輸出當前節點
        // 遞歸向左子樹前序遍歷
        if (this.left != null){
            this.left.preOrder();
        }
        // 遞歸向右子樹前序遍歷
        if (this.right != null){
            this.right.preOrder();
        }
    }
    // 編寫中序遍歷
    public void infixOrder(){
        // 遞歸向左子樹中序遍歷
        if (this.left != null){
            this.left.infixOrder();
        }
        System.out.println(this);
        // 嘀咕向右子樹中序遍歷
        if (this.right != null){
            this.right.infixOrder();
        }
    }
    // 編寫後序遍歷
    public void postOrder(){
        // 左子樹後序遍歷
        if (this.left != null){
            this.left.postOrder();
        }
        // 右子樹後序遍歷
        if (this.right != null){
            this.right.postOrder();
        }
        System.out.println(this);
    }
}