二叉樹前序中序後序遍歷
阿新 • • 發佈:2021-08-09
二叉樹遍歷:
- 建立一棵二叉樹
- 前序遍歷
- 先輸出當前節點(初始的時候是root節點)
- 如果左節點不為空,則遞迴繼續前序遍歷
- 如果右子節點不為空,則遞迴繼續前序遍歷
- 中序遍歷
- 如果當前節點的左子節點不為空,則遞迴中序遍歷
- 輸出當前節點
- 如果當前節點的右子節點不為空,則遞迴中序遍歷
- 後序遍歷
- 如果當前節點的左子節點不為空,則遞迴後序遍歷
- 如果當前節點的右子節點不為空,則遞迴右子節點
- 輸出當前節點
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); } }