欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

圖解二叉樹的三種遍歷方式及java實現(xiàn)代碼

 更新時間:2017年07月07日 11:56:43   作者:Acamy丶  
本篇文章主要介紹了圖解二叉樹的三種遍歷方式及java實現(xiàn)代碼,具有一定的參考價值,有興趣的可以了解一下

二叉樹(binary tree)是一顆樹,其中每個節(jié)點都不能有多于兩個的兒子。

1.二叉樹節(jié)點

作為圖的特殊形式,二叉樹的基本組成單元是節(jié)點與邊;作為數(shù)據(jù)結(jié)構(gòu),其基本的組成實體是二叉樹節(jié)點(binary tree node),而邊則對應(yīng)于節(jié)點之間的相互引用。

如下,給出了二叉樹節(jié)點的數(shù)據(jù)結(jié)構(gòu)圖示和相關(guān)代碼:

  // 定義節(jié)點類:
  private static class BinNode {
    private Object element;
    private BinNode lChild;// 定義指向左子樹的指針
    private BinNode rChild;// 定義指向右子樹的指針

    public BinNode(Object element, BinNode lChild, BinNode rChild) {
      this.element = element;
      this.lChild = lChild;
      this.rChild = rChild;
    }
  }

2.遞歸遍歷

二叉樹本身并不具有天然的全局次序,故為實現(xiàn)遍歷,需通過在各節(jié)點與其孩子之間約定某種局部次序,間接地定義某種全局次序。

按慣例左兄弟優(yōu)先于右兄弟,故若將節(jié)點及其孩子分別記作V、L和R,則下圖所示,局部訪問的次序可有VLR、LVR和LRV三種選擇。根據(jù)節(jié)點V在其中的訪問次序,三種策略也相應(yīng)地分別稱作先序遍歷、中序遍歷和后序遍歷,下面將分別介紹。

2.1 先序遍歷

圖示:

代碼實現(xiàn):

  /**
   * 對該二叉樹進(jìn)行前序遍歷 結(jié)果存儲到list中 前序遍歷
   */
  public static void preOrder(BinNode node) {
    list.add(node); // 先將根節(jié)點存入list
    // 如果左子樹不為空繼續(xù)往左找,在遞歸調(diào)用方法的時候一直會將子樹的根存入list,這就做到了先遍歷根節(jié)點
    if (node.lChild != null) {
      preOrder(node.lChild);
    }
    // 無論走到哪一層,只要當(dāng)前節(jié)點左子樹為空,那么就可以在右子樹上遍歷,保證了根左右的遍歷順序
    if (node.rChild != null) {
      preOrder(node.rChild);
    }
  }

2.2 中序遍歷

圖示:

代碼實現(xiàn):

  /**
   * 對該二叉樹進(jìn)行中序遍歷 結(jié)果存儲到list中
   */
  public static void inOrder(BinNode node) {
    if (node.lChild != null) {
      inOrder(node.lChild);
    }
    list.add(node);
    if (node.rChild != null) {
      inOrder(node.rChild);
    }
  }

2.3 后序遍歷

實例圖示:

代碼實現(xiàn):

  /**
   * 對該二叉樹進(jìn)行后序遍歷 結(jié)果存儲到list中
   */
  public static void postOrder(BinNode node) {
    if (node.lChild != null) {
      postOrder(node.lChild);
    }
    if (node.rChild != null) {
      postOrder(node.rChild);
    }
    list.add(node);
  }

附:測試相關(guān)代碼

  private static BinNode root;
  private static List<BinNode> list = new ArrayList<BinNode>();

  public static void main(String[] args) {
    init();
    // TODO Auto-generated method stub
    //preOrder(root);
    //inOrder(root);
    postOrder(root);
    for (int i = 0; i < list.size(); i++) {
      System.out.print(list.get(i).element + " ");
    }
  }

  // 樹的初始化:先從葉節(jié)點開始,由葉到根
  public static void init() {
    BinNode b = new BinNode("b", null, null);
    BinNode a = new BinNode("a", null, b);
    BinNode c = new BinNode("c", a, null);

    BinNode e = new BinNode("e", null, null);
    BinNode g = new BinNode("g", null, null);
    BinNode f = new BinNode("f", e, g);
    BinNode h = new BinNode("h", f, null);

    BinNode d = new BinNode("d", c, h);

    BinNode j = new BinNode("j", null, null);
    BinNode k = new BinNode("k", j, null);
    BinNode m = new BinNode("m", null, null);
    BinNode o = new BinNode("o", null, null);
    BinNode p = new BinNode("p", o, null);
    BinNode n = new BinNode("n", m, p);
    BinNode l = new BinNode("l", k, n);

    root = new BinNode("i", d, l);
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA SpringBoot:Cannot resolve configuration property配置文件問題

    IDEA SpringBoot:Cannot resolve configuration&

    這篇文章主要介紹了IDEA SpringBoot:Cannot resolve configuration property配置文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 學(xué)習(xí)Java中的日期和時間處理及Java日歷小程序的編寫

    學(xué)習(xí)Java中的日期和時間處理及Java日歷小程序的編寫

    這篇文章主要介紹了學(xué)習(xí)Java中的日期和時間處理及Java日歷小程序的編寫,這個日歷小程序僅用簡單的算法實現(xiàn)沒有用到date類等,但是帶有圖形界面,需要的朋友可以參考下
    2016-02-02
  • SpringBoot中YAML語法及幾個注意點說明

    SpringBoot中YAML語法及幾個注意點說明

    這篇文章主要介紹了SpringBoot中YAML語法及幾個注意點說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SWT(JFace) Menu、Bar...體驗代碼

    SWT(JFace) Menu、Bar...體驗代碼

    SWT(JFace)體驗之Menu、Bar實現(xiàn)代碼。
    2009-06-06
  • Java?Bean?作用域及它的幾種類型介紹

    Java?Bean?作用域及它的幾種類型介紹

    這篇文章主要介紹了Java?Bean作用域及它的幾種類型介紹,Spring框架作為一個管理Bean的IoC容器,那么Bean自然是Spring中的重要資源了,那Bean的作用域又是什么,接下來我們一起進(jìn)入文章詳細(xì)學(xué)習(xí)吧
    2022-09-09
  • java 中HttpClient傳輸xml字符串實例詳解

    java 中HttpClient傳輸xml字符串實例詳解

    這篇文章主要介紹了java 中HttpClient傳輸xml字符串實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 使用maven war包打包去除jar包瘦身

    使用maven war包打包去除jar包瘦身

    這篇文章主要介紹了使用maven war包打包去除jar包瘦身操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 如何使用stream從List對象中獲取某列數(shù)據(jù)

    如何使用stream從List對象中獲取某列數(shù)據(jù)

    這篇文章主要介紹了如何使用stream從List對象中獲取某列數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java多線程實現(xiàn)聊天客戶端和服務(wù)器

    Java多線程實現(xiàn)聊天客戶端和服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了Java多線程聊天客戶端和服務(wù)器實現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • SpringMVC基于注解的Controller詳解

    SpringMVC基于注解的Controller詳解

    這篇文章主要介紹了SpringMVC基于注解的Controller詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論