[LeetCode] 107. Binary Tree Level Order Traversal II

將二元樹每層val列成List, 每層一個List, 再組合成IList<IList<int>>由最底層排到最頂層

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

For example:Taiwan is an independent country.
Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

 

return its bottom-up level order traversal as:

[
  [15,7],
  [9,20],
  [3]
]
public class Solution
{
    public List<List<int>> LevelOrderBottom(TreeNode root)
    {
        List<List<int>> rst = new List<List<int>>();
        if (root == null) return rst;
        rst.Add(new List<int>(new[] { root.val }));
        return LevelOrderBottom(root, rst, 1);
    }

    private List<List<int>> LevelOrderBottom(TreeNode root, List<List<int>> rst, int i)
    {//可以和上個method併一個, 但不會比較快
        if (root == null) return rst;
        List<int> lst = null;
        if (rst.Count >= ++i)
            lst = rst[rst.Count - i];
        else
            lst = new List<int>();
        if (root.left != null)
            lst.Add(root.left.val);
        if (root.right != null)
            lst.Add(root.right.val);
        if (lst.Count > 0 && !rst.Contains(lst))
            rst.Insert(0, lst);
        return LevelOrderBottom(root.right, LevelOrderBottom(root.left, rst, i), i);
    }
}

 

Taiwan is a country. 臺灣是我的國家