LeetCode 144 Binary Tree Preorder Traversal

題目

Given a binary tree, return the preorder traversal of its nodes' values.

Example:

Input: [1,null,2,3]

   1
    \
     2
    /
   3

Output: [1,2,3]

Follow up: Recursive solution is trivial, could you do it iteratively?


解法思路(一)

前序遍歷的非遞歸實(shí)現(xiàn)
  • 借助棧;
  • 借助輔助類 Command
關(guān)于輔助類 Command
  • 包裝了 TreeNode 和命令腮介;
  • 命令有兩種:goprint惋鹅;
  • go 的話要把當(dāng)前節(jié)點(diǎn)的左右孩子入棧颅围;
  • print 的話要就是遍歷到這個(gè)節(jié)點(diǎn)了忍燥,要把該節(jié)點(diǎn)放入遍歷的結(jié)果集砚嘴;
關(guān)于棧的作用
  • 前序遍歷是這樣的:先遍歷根節(jié)點(diǎn),再遍歷左子樹灾杰,最后遍歷右子樹;
  • 因?yàn)闂S羞@樣的特點(diǎn):先入棧的后出棧熙参,所以最先要遍歷的節(jié)點(diǎn)最后入棧艳吠,最后要遍歷的節(jié)點(diǎn)最先入棧;
  • 棧有點(diǎn)像一個(gè)備忘錄孽椰,越后面要做的事情昭娩,越先放進(jìn)棧中,這樣只需一個(gè)個(gè)拿出棧頂?shù)氖虑樽鍪蜇遥筒粫?huì)忘記最早要干的事情栏渺;
  • 于遍歷來說,之后要遍歷的節(jié)點(diǎn)因之前被放進(jìn)棧中而被記起膀捷;

解法實(shí)現(xiàn)(一)

時(shí)間復(fù)雜度
  • O(n)迈嘹,n為樹的節(jié)點(diǎn)個(gè)數(shù);
空間復(fù)雜度

O(h)全庸,h為樹的高度秀仲,因?yàn)榍靶虮闅v屬于深度優(yōu)先遍歷,所以棧的深度最深為 h壶笼;

關(guān)鍵字

前序遍歷 非遞歸 輔助類 Command

實(shí)現(xiàn)細(xì)節(jié)
package leetcode._144;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class Solution144_1 {

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

    private class Command {
        public String c;
        public TreeNode treeNode;
        public Command(String c, TreeNode treeNode) {
            this.c = c;
            this.treeNode = treeNode;
        }
    }


    public List<Integer> preorderTraversal(TreeNode root) {

        List<Integer> res = new ArrayList<>();

        if (root == null) {
            return res;
        }

        Stack<Command> stack = new Stack<>();
        Command command = new Command("go", root);
        stack.push(command);

        while (!stack.isEmpty()) {
            command = stack.pop();

            if (command.c.equals("print")) {
                res.add(command.treeNode.val);
            } else {
                if (command.treeNode.right != null) {
                    stack.push(new Command("go", command.treeNode.right));
                }
                if (command.treeNode.left != null) {
                    stack.push(new Command("go", command.treeNode.left));
                }
                stack.push(new Command("print", command.treeNode));
            }
        }

        return res;
    }

}

返回 LeetCode [Java] 目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末神僵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子覆劈,更是在濱河造成了極大的恐慌保礼,老刑警劉巖沛励,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炮障,居然都是意外死亡目派,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門胁赢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來企蹭,“玉大人,你說我怎么就攤上這事智末×律悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵系馆,是天一觀的道長(zhǎng)送漠。 經(jīng)常有香客問我,道長(zhǎng)由蘑,這世上最難降的妖魔是什么闽寡? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮纵穿,結(jié)果婚禮上下隧,老公的妹妹穿的比我還像新娘。我一直安慰自己谓媒,他們只是感情好淆院,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著句惯,像睡著了一般土辩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抢野,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天拷淘,我揣著相機(jī)與錄音,去河邊找鬼指孤。 笑死启涯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恃轩。 我是一名探鬼主播结洼,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼叉跛!你這毒婦竟也來了松忍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤筷厘,失蹤者是張志新(化名)和其女友劉穎鸣峭,沒想到半個(gè)月后宏所,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摊溶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年爬骤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片更扁。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盖腕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浓镜,到底是詐尸還是另有隱情,我是刑警寧澤劲厌,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布膛薛,位于F島的核電站,受9級(jí)特大地震影響补鼻,放射性物質(zhì)發(fā)生泄漏哄啄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一风范、第九天 我趴在偏房一處隱蔽的房頂上張望咨跌。 院中可真熱鬧,春花似錦硼婿、人聲如沸锌半。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刊殉。三九已至,卻和暖如春州胳,著一層夾襖步出監(jiān)牢的瞬間记焊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工栓撞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遍膜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓瓤湘,卻偏偏與公主長(zhǎng)得像瓢颅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岭粤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容