leetcode 590. N叉樹的后序遍歷

題目描述

給定一個 N 叉樹脖岛,返回其節(jié)點值的后序遍歷菱鸥。
相關(guān)話題:?樹????難度:?簡單

例如,給定一個 3叉樹 :

返回其后序遍歷: [5,6,3,2,4,1].
說明: 遞歸法很簡單,你可以使用迭代法完成此題嗎?

  • 解法1
    使用遞歸的方法先遍歷當前節(jié)點的所有children節(jié)點压真,遍歷完后處理當前節(jié)點。
    public List<Integer> postorder(Node root) {
        List<Integer> res = new ArrayList<Integer>();
        postorder(root, res);
        return res;
    }
    public void postorder(Node root, List<Integer> res){
        if(root == null) return;
        //遍歷當前節(jié)點的children
        for(Node x : root.children){
            postorder(x, res); 
        }
        //遍歷完children后蘑险,處理當前節(jié)點
         res.add(root.val);
    }
  • 解法2
    迭代方式的解題思路和leetcode 145題類似滴肿,同樣用到兩個棧,一個協(xié)助以“中->右->左”遍歷樹佃迄,一個保存遍歷的結(jié)果泼差。
  • 初始狀態(tài)下贵少,stack1保存了根節(jié)點(為了統(tǒng)一操作,包裝到list)堆缘。
  • while循環(huán)內(nèi)滔灶,彈出stack1中的List對象(也就是子節(jié)點的集合),先處理最后一個節(jié)點(Node x = list.remove(list.size()-1);stack2.push(x);)吼肥,然后如果list不為空的話录平,將其壓回到stack1中,并將當前節(jié)點(最右的節(jié)點)的子節(jié)點集合壓到stack1中缀皱。
  • stack1為空時斗这,遍歷結(jié)束。
    以上就是“中->右->左”的遍歷過程啤斗。
public List<Integer> postorder(Node root) {
        if(root == null) return new ArrayList<Integer>();
        List<Integer> res = new ArrayList<Integer>();
        //保存剩余未遍歷子節(jié)點(左)
        Stack<List<Node>> stack1 = new Stack<>();
        //保存結(jié)果
        Stack<Node> stack2 = new Stack<>();
        List<Node> tmp = new ArrayList<Node>();
        tmp.add(root);
        stack1.push(tmp);
        while(!stack1.isEmpty()){
            List<Node> list = stack1.pop();
            Node x = list.remove(list.size()-1);
            stack2.push(x);
            if(!list.isEmpty()){
                stack1.push(list);
            }
            if(!x.children.isEmpty()){
                stack1.push(x.children);
            }
        }
        while(!stack2.isEmpty()){
            res.add(stack2.pop().val);
        }
        return res;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末表箭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钮莲,更是在濱河造成了極大的恐慌免钻,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崔拥,死亡現(xiàn)場離奇詭異极舔,居然都是意外死亡,警方通過查閱死者的電腦和手機握童,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門姆怪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澡绩,你說我怎么就攤上這事稽揭。” “怎么了肥卡?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵溪掀,是天一觀的道長。 經(jīng)常有香客問我步鉴,道長揪胃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任氛琢,我火速辦了婚禮喊递,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阳似。我一直安慰自己骚勘,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俏讹,像睡著了一般当宴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泽疆,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天户矢,我揣著相機與錄音,去河邊找鬼殉疼。 笑死梯浪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的株依。 我是一名探鬼主播驱证,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼延窜,長吁一口氣:“原來是場噩夢啊……” “哼恋腕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逆瑞,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤荠藤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后获高,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哈肖,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年念秧,在試婚紗的時候發(fā)現(xiàn)自己被綠了淤井。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡摊趾,死狀恐怖币狠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砾层,我是刑警寧澤漩绵,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站肛炮,受9級特大地震影響止吐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侨糟,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一碍扔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秕重,春花似錦不同、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽站蝠。三九已至,卻和暖如春卓鹿,著一層夾襖步出監(jiān)牢的瞬間菱魔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工吟孙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澜倦,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓杰妓,卻偏偏與公主長得像藻治,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子巷挥,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348