LeetCode算法題-N-ary Tree Level Order Traversal(Java實現(xiàn))

這是悅樂書的第225次更新檐嚣,第238篇原創(chuàng)

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第92題(順位題號是429)。給定n-ary樹啰扛,返回其節(jié)點值的級別順序遍歷嚎京。(即嗡贺,從左到右,逐級)鞍帝。例如诫睬,給定一個3-ary樹:


image

我們應該返回它的級別順序遍歷:

[[1],[3,2,4][5,6]]

注意:

  • 樹的深度最多為1000帕涌。

  • 節(jié)點總數(shù)最多為5000摄凡。

本次解題使用的開發(fā)工具是eclipse,jdk使用的版本是1.8宵膨,環(huán)境是win7 64位系統(tǒng)架谎,使用Java語言編寫和測試。

02 第一種解法

使用廣度優(yōu)先算法(BFS)辟躏,一級一級谷扣,從左往右遍歷,對此我們借助隊列來實現(xiàn)捎琐。

特殊情況:當root為null時会涎,直接返回一個沒有任何元素的list。

正常情況:先將root放入隊列瑞凑,然后開始循環(huán)末秃,最外層循環(huán),我們新建一個list籽御,存入每一級的元素练慕,第二層循環(huán)開始處理隊列中上一輪被添加進去的node,依次poll出來技掏,將其val存入外層循環(huán)新建的list中铃将,而其另一個屬性children,因為是一個以node為元素的數(shù)組哑梳,所以在此使用for-each循環(huán)劲阎,將其添加進隊列中,在下一輪循環(huán)時再從隊列中取出鸠真。

// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val,List<Node> _children) {
        val = _val;
        children = _children;
    }
}

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> result = new ArrayList<>();
        if (root == null) {
            return result;
        }
        Queue<Node> queue = new LinkedList<Node>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            List<Integer> current = new ArrayList<>();
            int length = queue.size();
            for (int i=0; i<length; i++) {
                Node curr = queue.poll();
                current.add(curr.val);
                for (Node n : curr.children) {
                    queue.offer(n);
                }
            }
            result.add(current);
        }
        return result;
    }
}


03 第二種解法

使用深度優(yōu)先算法(DFS)悯仙,此方法就需要使用遞歸來操作了。

在樹的每一級吠卷,都可以看做是當前問題的子問題锡垄,因此我們將數(shù)組、根節(jié)點祭隔、層級這三個要素作為遞歸的條件偎捎。在遞歸方法中,如果當前節(jié)點為null,直接return茴她;如果當前result的大小和層級相等,就往result新加一個list程奠,然后從result中取出當前層級對應的數(shù)組丈牢,先將當前節(jié)點值添加進去,然后for-each遍歷其children瞄沙,每一個children都符合當前問題的描述己沛,在此調(diào)用方法自身,但是第三個參數(shù)層級需要往上加1距境,因為進入了當前節(jié)點的下一層級申尼。

// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val,List<Node> _children) {
        val = _val;
        children = _children;
    }
}

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> result = new ArrayList<>();
        levelOrder(root, result, 0);
        return result;
    }

    public void levelOrder(Node root, List<List<Integer>> result, int level) {
        if (root == null) {
            return ;
        }
        if (result.size() == level) {
            result.add(new ArrayList<>());
        }
        List<Integer> list = result.get(level);
        list.add(root.val);
        for (Node n : root.children) {
            levelOrder(n, result, level+1);
        }
    }
}


04 小結(jié)

算法專題目前已連續(xù)日更超過兩個月,算法題文章92+篇垫桂,公眾號對話框回復【數(shù)據(jù)結(jié)構(gòu)與算法】师幕、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關鍵詞诬滩,獲取系列文章合集霹粥。

以上就是全部內(nèi)容,如果大家有什么好的解法思路疼鸟、建議或者其他問題后控,可以下方留言交流,點贊空镜、留言浩淘、轉(zhuǎn)發(fā)就是對我最大的回報和支持!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吴攒,一起剝皮案震驚了整個濱河市张抄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舶斧,老刑警劉巖欣鳖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茴厉,居然都是意外死亡泽台,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門矾缓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀酷,“玉大人,你說我怎么就攤上這事嗜闻⊥梢溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長样眠。 經(jīng)常有香客問我友瘤,道長,這世上最難降的妖魔是什么檐束? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任辫秧,我火速辦了婚禮,結(jié)果婚禮上被丧,老公的妹妹穿的比我還像新娘盟戏。我一直安慰自己,他們只是感情好甥桂,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布柿究。 她就那樣靜靜地躺著,像睡著了一般黄选。 火紅的嫁衣襯著肌膚如雪蝇摸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天糕簿,我揣著相機與錄音探入,去河邊找鬼。 笑死懂诗,一個胖子當著我的面吹牛蜂嗽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殃恒,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼植旧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了离唐?” 一聲冷哼從身側(cè)響起病附,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亥鬓,沒想到半個月后完沪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡嵌戈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年覆积,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熟呛。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡宽档,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庵朝,到底是詐尸還是另有隱情吗冤,我是刑警寧澤又厉,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站椎瘟,受9級特大地震影響覆致,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肺蔚,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一篷朵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婆排,春花似錦、人聲如沸笔链。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鉴扫。三九已至赞枕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坪创,已是汗流浹背炕婶。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莱预,地道東北人柠掂。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像依沮,于是被迫代替她去往敵國和親涯贞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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