最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java非遞歸實(shí)現(xiàn)之二叉樹的前中后序遍歷詳解

 更新時(shí)間:2021年09月16日 10:44:45   作者:小玄ks  
樹的遍歷順序大體分為三種:前序遍歷(先根遍歷、先序遍歷),中序遍歷(中根遍歷),后序遍歷(后根遍歷),本文將給大家詳細(xì)的介紹,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值

二叉樹的前中后序遍歷

核心思想:用棧來實(shí)現(xiàn)對(duì)節(jié)點(diǎn)的存儲(chǔ)。一邊遍歷,一邊將節(jié)點(diǎn)入棧,在需要時(shí)將節(jié)點(diǎn)從棧中取出來并遍歷該節(jié)點(diǎn)的左子樹或者右子樹,重復(fù)上述過程,當(dāng)棧為空時(shí),遍歷完成。

前序遍歷

//非遞歸
//根 左 右
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        //用數(shù)組來存儲(chǔ)前序遍歷結(jié)果
        List<Integer> list = new ArrayList<>();
        if(root==null)  return list;
        
        //創(chuàng)建一個(gè)棧
        Stack<TreeNode> st = new Stack<>();
        //cur指向根節(jié)點(diǎn)
        TreeNode cur = root;
        
        while(!st.isEmpty()||cur!=null){
        
            //一邊向左遍歷,一邊將遍歷到的節(jié)點(diǎn)入棧,節(jié)點(diǎn)值入數(shù)組
            while(cur!=null){
                list.add(cur.val);
                st.push(cur);	//根
                cur=cur.left;	//左
            }
            
            //指針指向棧頂節(jié)點(diǎn)(即上一個(gè)節(jié)點(diǎn)),并將棧頂節(jié)點(diǎn)出棧
            cur = st.pop();
            //指針指向該節(jié)點(diǎn)的右子樹,開始下一輪的遍歷
            cur = cur.right;	//右
        }
        return list;
    }
}

中序遍歷

//非遞歸
//左 根 右
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        
      List<Integer> list = new ArrayList<>();
      if(root==null)    return list;
        
      Stack<TreeNode> st = new Stack<>();
       TreeNode cur = root;
      while(!st.isEmpty()||cur!=null){
      //一邊向左遍歷,一邊將遍歷到的節(jié)點(diǎn)入棧
          while(cur!=null){
              st.push(cur);
              cur = cur.left;	//左
          }
          cur = st.pop();
          //存儲(chǔ)遍歷結(jié)果
          list.add(cur.val);	//根
          cur = cur.right;		//右
      }
      return list;
    }
}

前序遍歷和中序遍歷的代碼基本相同,但是后序遍歷與它們不太一樣

后序遍歷

//非遞歸
//左 右 根
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
     List<Integer> list = new ArrayList<>();
     if(root==null) return list;
     TreeNode cur = root;
     
     //關(guān)鍵在于定義一個(gè)cur的前驅(qū)節(jié)點(diǎn)
     TreeNode pre = null;
     Stack<TreeNode> st = new Stack<>();
     while(cur!=null||!st.isEmpty()){
     
     	//一邊向左遍歷,一邊將遍歷到的節(jié)點(diǎn)入棧
         while(cur!=null){
             st.push(cur);
            cur = cur.left;
         }
         cur = st.pop();
         //若該節(jié)點(diǎn)的右節(jié)點(diǎn)為空,或者右節(jié)點(diǎn)被遍歷過,數(shù)組才能存儲(chǔ)該節(jié)點(diǎn)的數(shù)值(也就是我們最后才遍歷的根)
         if(cur.right==null||cur.right==pre){
             list.add(cur.val);
             pre = cur;
             cur=null;
         }else{//如果不滿足,說明該節(jié)點(diǎn)的右節(jié)點(diǎn)還沒有被遍歷過,那么接著向右子節(jié)點(diǎn)遍歷
             st.push(cur);
             cur=cur.right;
         }
     }
     return list;
    }
}

到此這篇關(guān)于java非遞歸實(shí)現(xiàn)之二叉樹的前中后序遍歷詳解的文章就介紹到這了,更多相關(guān)Java 二叉樹遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存的示例代碼

    SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存的示例代碼

    這篇文章主要介紹了SpringBoot整合Guava Cache實(shí)現(xiàn)全局緩存,Guava Cache是Google Guava庫中的一個(gè)模塊,提供了基于內(nèi)存的本地緩存實(shí)現(xiàn),文中介紹了SpringBoot整合使用Guava Cache的具體步驟,需要的朋友可以參考下
    2024-03-03
  • JAVA獲取Image的三種方式

    JAVA獲取Image的三種方式

    這篇文章主要介紹了JAVA獲取Image的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot整合Jasypt實(shí)現(xiàn)配置加密的步驟詳解

    SpringBoot整合Jasypt實(shí)現(xiàn)配置加密的步驟詳解

    Jasypt是一個(gè)Java庫,提供了一種簡(jiǎn)單的加密解密方式,可用于保護(hù)敏感數(shù)據(jù),例如密碼、API密鑰和數(shù)據(jù)庫連接信息等,本文給大家介紹了SpringBoot整合Jasypt實(shí)現(xiàn)配置加密的詳細(xì)步驟,感興趣的同學(xué)可以參考一下
    2023-11-11
  • 在java中http請(qǐng)求帶cookie的例子

    在java中http請(qǐng)求帶cookie的例子

    今天小編就為大家分享一篇在java中http請(qǐng)求帶cookie的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問題小結(jié)

    Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問題小結(jié)

    這篇文章主要介紹了Java8 中使用Stream 讓List 轉(zhuǎn) Map使用總結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-06-06
  • Spring data jpa @Query update的坑及解決

    Spring data jpa @Query update的坑及解決

    這篇文章主要介紹了Spring data jpa @Query update的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java?8函數(shù)式接口之Consumer用法示例詳解

    Java?8函數(shù)式接口之Consumer用法示例詳解

    這篇文章主要為大家介紹了Java?8函數(shù)式接口之Consumer用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 詳解Java?中的函數(shù)式接口

    詳解Java?中的函數(shù)式接口

    這篇文章主要為大家介紹了Java中的函數(shù)式接口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • 淺談JAVA內(nèi)存分配與參數(shù)傳遞

    淺談JAVA內(nèi)存分配與參數(shù)傳遞

    這篇文章主要介紹了JAVA內(nèi)存分配與參數(shù)傳遞,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Springboot使用RestTemplate調(diào)用第三方接口的操作代碼

    Springboot使用RestTemplate調(diào)用第三方接口的操作代碼

    這篇文章主要介紹了Springboot使用RestTemplate調(diào)用第三方接口,我只演示了最常使用的請(qǐng)求方式get、post的簡(jiǎn)單使用方法,當(dāng)然RestTemplate的功能還有很多,感興趣的朋友可以參考RestTemplate源碼
    2022-12-12

最新評(píng)論

祁门县| 科技| 乌兰察布市| 磐安县| 陆河县| 苍南县| 彭泽县| 黄山市| 克山县| 塘沽区| 台东市| 淅川县| 遵化市| 白银市| 沈阳市| 尼勒克县| 松溪县| 肃南| 常熟市| 湾仔区| 二手房| 四川省| 福安市| 浑源县| 宣汉县| 阿拉善盟| 措勤县| 永顺县| 舟山市| 尼玛县| 分宜县| 亚东县| 集贤县| 虞城县| 堆龙德庆县| 刚察县| 息烽县| 鸡泽县| 九江市| 连州市| 宜兴市|