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