二叉树的前序、中序、后序遍历(保姆级分析,建议收藏~)
生活随笔
收集整理的這篇文章主要介紹了
二叉树的前序、中序、后序遍历(保姆级分析,建议收藏~)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉樹前 中 后
- 前序:根 左 右
- 中序:左 根 右
- 后序:左 右 根
顧名思義:二叉樹的遍歷都是基于根節點的位置進行判斷的。遍歷的順序也是基于根節點的順序進行的。
步驟
- 1 為了方便進行演示,創建一棵二叉樹。
- 2 前序遍歷:
- 2.1 輸出當前節點(初始的當前節點是root)。
- 2.2 如果左子節點不為空,則遞歸繼續前序遍歷。
- 2.3 如果右子節點不為空,則遞歸繼續前序遍歷。
- 3 中序遍歷:
- 3.1 如果左子節點不為空,則遞歸繼續中序遍歷。
- 3.2 輸出當前節點。
- 3.3 如果右子節點不為空,則遞歸繼續中序遍歷。
- 4 后序遍歷:
- 4.1 如果左子節點不為空,則遞歸繼續后序遍歷。
- 4.2 如果右子節點不為空,則遞歸繼續后序遍歷。
- 4.3 輸出當前節點。
創建節點
//先創建HeroNode 節點class HeroNode {private int no;private String name;private HeroNode left;//默認是nullprivate HeroNode right;public HeroNode(int no, String name) {this.no = no;this.name = name;}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public HeroNode getLeft() {return left;}public void setLeft(HeroNode left) {this.left = left;}public HeroNode getRight() {return right;}public void setRight(HeroNode right) {this.right = right;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +'}';}創建二叉樹
BinaryTree binaryTree = new BinaryTree(); // 創建需要的節點HeroNode root = new HeroNode(1,"宋江");HeroNode node2 = new HeroNode(2,"吳用");HeroNode node3 = new HeroNode(3,"盧俊義");HeroNode node4 = new HeroNode(4,"林沖");HeroNode node5 = new HeroNode(5,"關勝");HeroNode node6 = new HeroNode(6,"武松");HeroNode node7 = new HeroNode(7,"李逵"); // 先手動創建該二叉樹// // 后面使用遞歸進行root.setLeft(node2);node2.setLeft(node6);node2.setRight(node7);root.setRight(node3);node3.setLeft(node5);node3.setRight(node4);binaryTree.setRoot(root);用圖展示一下:
前序 中序 后序(這里使用了遞歸的思想,如果寫的不夠詳細,可以單出一個關于遞歸的)
//前序遍歷的方法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);}測試輸出
前序遍歷 HeroNode{no=1, name='宋江'} HeroNode{no=2, name='吳用'} HeroNode{no=6, name='武松'} HeroNode{no=7, name='李逵'} HeroNode{no=3, name='盧俊義'} HeroNode{no=5, name='關勝'} HeroNode{no=4, name='林沖'} 中序遍歷 HeroNode{no=6, name='武松'} HeroNode{no=2, name='吳用'} HeroNode{no=7, name='李逵'} HeroNode{no=1, name='宋江'} HeroNode{no=5, name='關勝'} HeroNode{no=3, name='盧俊義'} HeroNode{no=4, name='林沖'} 后序遍歷 HeroNode{no=6, name='武松'} HeroNode{no=7, name='李逵'} HeroNode{no=2, name='吳用'} HeroNode{no=5, name='關勝'} HeroNode{no=4, name='林沖'} HeroNode{no=3, name='盧俊義'} HeroNode{no=1, name='宋江'}如果覺得有用,可以關注一下力扣:羊村兒的希望
總結
以上是生活随笔為你收集整理的二叉树的前序、中序、后序遍历(保姆级分析,建议收藏~)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【每天1分钟】MarkDown语法学习之
- 下一篇: 搜索fing