日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

二叉树的前序、中序、后序遍历(保姆级分析,建议收藏~)

發(fā)布時(shí)間:2023/12/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树的前序、中序、后序遍历(保姆级分析,建议收藏~) 小編覺(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。