二叉樹——后序遍歷的遞歸與非遞歸算法

后序遍歷按照“左孩子-右孩子-根結點”的順序進行訪問嫂粟。

1.遞歸實現

   /**
    * 后序遍歷
    * @param node
    */
   public static void postOrderTraverse(Node node) {
       if (node == null) return;
       postOrderTraverse(node.leftNode);
       postOrderTraverse(node.rightNode);
       System.out.print(node.data + "\t");
   }

2.非遞歸實現

后序遍歷的非遞歸實現是三種遍歷方式中最難的一種。因為在后序遍歷中椰于,要保證左孩子和右孩子都已被訪問并且左孩子在右孩子前訪問才能訪問根結點淘菩,這就為流程的控制帶來了難題。

對于任一結點P霜幼,將其入棧嫩码,然后沿其左子樹一直往下搜索,直到搜索到沒有左孩子的結點罪既,此時該結點出現在棧頂铸题,但是此時不能將其出棧并訪問, 因此其右孩子還為被訪問琢感。所以接下來按照相同的規(guī)則對其右子樹進行相同的處理丢间,當訪問完其右孩子時,該結點又出現在棧頂驹针,此時可以將其出棧并訪問烘挫。這樣就 保證了正確的訪問順序〖砩可以看出饮六,在這個過程中其垄,每個結點都兩次出現在棧頂,只有在第二次出現在棧頂時卤橄,才能訪問它绿满。因此需要多設置一個變量標識該結點是 否是第一次出現在棧頂。

   /**
    * 后序遍歷 非遞歸
    * 雙棧法
    * @param root
    */
   public static void postOrder2(Node root) {
       Stack<Node> stack = new Stack<Node>();
       Stack<Node> output = new Stack<Node>();
       Node node = root;
       while (node != null || !stack.isEmpty()) {
           if (node != null) {
               stack.push(node);
               output.push(node);
               node = node.rightNode;
           } else {
               node = stack.pop();
               node = node.leftNode;
           }
       }

       while (output.size() > 0) {
           Node n = output.pop();
           System.out.print(n.data + "\t");
       }
   }
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末窟扑,一起剝皮案震驚了整個濱河市喇颁,隨后出現的幾起案子,更是在濱河造成了極大的恐慌辜膝,老刑警劉巖无牵,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異厂抖,居然都是意外死亡茎毁,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門忱辅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來七蜘,“玉大人,你說我怎么就攤上這事墙懂∠鹇保” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵损搬,是天一觀的道長碧库。 經常有香客問我,道長巧勤,這世上最難降的妖魔是什么嵌灰? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮颅悉,結果婚禮上沽瞭,老公的妹妹穿的比我還像新娘。我一直安慰自己剩瓶,他們只是感情好驹溃,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著延曙,像睡著了一般豌鹤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搂鲫,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天傍药,我揣著相機與錄音,去河邊找鬼。 笑死拐辽,一個胖子當著我的面吹牛拣挪,可吹牛的內容都是我干的。 我是一名探鬼主播俱诸,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼菠劝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了睁搭?” 一聲冷哼從身側響起赶诊,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎园骆,沒想到半個月后舔痪,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡锌唾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年锄码,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晌涕。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡滋捶,死狀恐怖,靈堂內的尸體忽然破棺而出余黎,到底是詐尸還是另有隱情重窟,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布惧财,位于F島的核電站巡扇,受9級特大地震影響,放射性物質發(fā)生泄漏垮衷。R本人自食惡果不足惜霎迫,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帘靡。 院中可真熱鬧,春花似錦瓤帚、人聲如沸描姚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轩勘。三九已至,卻和暖如春怯邪,著一層夾襖步出監(jiān)牢的瞬間绊寻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澄步,地道東北人冰蘑。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像村缸,于是被迫代替她去往敵國和親祠肥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內容