【leetcode-107】二叉樹的層序遍歷II

**給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷) **

例如,給出

二叉樹:[3,9,20,null,null,15,7]

​ 3
/\
9 20
​ / \
15 7

返回的層次遍歷結果:

[

[15, 7],

[9, 20],

[3],

]

來源:leetcode - 107

知識點:

  • 隊列:先進先出
  • BFS:採用隊列保存節點

簡要思路:不斷向隊列中添加節點,進隊,出隊,直到樹中所有的節點都遍歷完,但是在每層節點保存時,插入到 res 頭位置。

詳細思路:定義一個隊列,將根節點放入隊列,判斷隊列是否爲空,while 循環中添加一個 for 循環,每次添加每層的 n 個元素到 res 結果集中的頭位置,直到所有節點都遍歷完。

代碼:

class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> ans = new LinkedList<>();
        if(root == null){
            return ans;
        }
        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);
        while (!q.isEmpty()){
            List<Integer> tmp = new LinkedList<>();
            int len = q.size();
            for (int i=0; i<len; i++){
                TreeNode node = q.poll();
                tmp.add(node.val);
                if(node.left != null){
                    q.add(node.left);
                }
                if(node.right != null){
                    q.add(node.right);
                }
            }
            ans.add(0, tmp);
        }
        return ans;
    }
}

人生總是那麼痛苦嗎?還是隻有小時候是這樣? ——總是如此。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章