102. Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

07/04/2017更新

前天周三洛心,覃超說(shuō)這題可以用DFS做站刑。就做了一下走贪。
精巧的地方在于res.get(level).add(node.val);這一句。按照DFS的思想考慮的話忘闻,它會(huì)把樹(shù)的每層最左邊節(jié)點(diǎn)存成一個(gè)cell list放到res里去,然后再backtracking回來(lái),拿到那一level的節(jié)點(diǎn)繼續(xù)往響應(yīng)的leve 所在的cell list里面加婚脱。

如下:


    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if (root == null) return res;
        dfs(res, root, 0);
        return res;
    }

    private void dfs(List<List<Integer>> res, TreeNode node, int level) {
        if (node == null) return;
        if (level >= res.size()) {
            res.add(new ArrayList<Integer>());
        }
        res.get(level).add(node.val);
        dfs(res, node.left, level + 1);
        dfs(res, node.right, level + 1);
    }

初版

這題跟求Maximum depth of a binary的非遞歸方法非常像,用一個(gè)queue保存結(jié)點(diǎn)勺像。

Code Ganker的講解太好了:
這道題要求實(shí)現(xiàn)樹(shù)的層序遍歷障贸,其實(shí)本質(zhì)就是把樹(shù)看成一個(gè)有向圖,然后進(jìn)行一次廣度優(yōu)先搜索咏删,這個(gè)圖遍歷算法是非常常見(jiàn)的惹想,這里同樣是維護(hù)一個(gè)隊(duì)列,只是對(duì)于每個(gè)結(jié)點(diǎn)我們知道它的鄰接點(diǎn)只有可能是左孩子和右孩子督函,具體就不仔細(xì)介紹了嘀粱。算法的復(fù)雜度是就結(jié)點(diǎn)的數(shù)量,O(n)辰狡,空間復(fù)雜度是一層的結(jié)點(diǎn)數(shù)锋叨,也是O(n)。

public class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if (root == null) return res;
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        //本層結(jié)點(diǎn)數(shù)
        int curNum = 1;
        //下一層結(jié)點(diǎn)數(shù)
        int nextNum = 0;
        List<Integer> cell = new ArrayList<>();
        while (!queue.isEmpty()) {
            TreeNode temp = queue.poll();
            curNum--;
            cell.add(temp.val);

            if (temp.left != null) {
                queue.add(temp.left);
                nextNum++;
            }
            if (temp.right != null) {
                queue.add(temp.right);
                nextNum++;
            }
            if (curNum == 0) {
                res.add(cell);
                curNum = nextNum;
                nextNum = 0;
                
                cell = new ArrayList<>();
            }
        }
        return res;
    }

注意不要把
List<Integer> cell = new ArrayList<>();寫(xiě)到while循環(huán)里宛篇,否則會(huì)出現(xiàn)下面的錯(cuò)誤娃磺。

Input:

[3,9,20,null,null,15,7]
Output:
[[3],[20],[7]]
Expected:
[[3],[9,20],[15,7]]

另外注意,queue要用poll方法取數(shù)而不是pop叫倍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偷卧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吆倦,更是在濱河造成了極大的恐慌听诸,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚕泽,死亡現(xiàn)場(chǎng)離奇詭異晌梨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)须妻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)仔蝌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人荒吏,你說(shuō)我怎么就攤上這事敛惊。” “怎么了司倚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵豆混,是天一觀的道長(zhǎng)篓像。 經(jīng)常有香客問(wèn)我,道長(zhǎng)皿伺,這世上最難降的妖魔是什么员辩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮鸵鸥,結(jié)果婚禮上奠滑,老公的妹妹穿的比我還像新娘。我一直安慰自己妒穴,他們只是感情好宋税,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著讼油,像睡著了一般杰赛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矮台,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天乏屯,我揣著相機(jī)與錄音,去河邊找鬼瘦赫。 笑死辰晕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的确虱。 我是一名探鬼主播含友,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼校辩!你這毒婦竟也來(lái)了窘问?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宜咒,失蹤者是張志新(化名)和其女友劉穎南缓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體荧呐,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年纸镊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倍阐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逗威,死狀恐怖峰搪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凯旭,我是刑警寧澤概耻,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布使套,位于F島的核電站,受9級(jí)特大地震影響鞠柄,放射性物質(zhì)發(fā)生泄漏侦高。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一厌杜、第九天 我趴在偏房一處隱蔽的房頂上張望奉呛。 院中可真熱鬧,春花似錦夯尽、人聲如沸瞧壮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咆槽。三九已至,卻和暖如春圈纺,著一層夾襖步出監(jiān)牢的瞬間秦忿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工赠堵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留小渊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓茫叭,卻偏偏與公主長(zhǎng)得像酬屉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揍愁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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