原题
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
代码分析
二叉树的层序遍历。
代码实现
public IList<IList<int>> LevelOrder(TreeNode root) {
if (root == null)
return new List<IList<int>>();
IList<IList<int>> rtn = new List<IList<int>>{new List<int> {root.val}};
var tmp = getNextLevel(new List<TreeNode> { root });
if (tmp != null && tmp.Count > 0)
{
foreach (var item in tmp)
rtn.Add(item);
}
return rtn;
}
private IList<IList<int>> getNextLevel(IList<TreeNode> curLevel)
{
if (curLevel == null || curLevel.Count == 0)
return null;
IList<IList<int>> rtn= new List<IList<int>>();
List<TreeNode> nextn = new List<TreeNode>();
foreach (var item in curLevel)
{
if (item.left != null)
nextn.Add(item.left);
if (item.right != null)
nextn.Add(item.right);
}
if (nextn.Count == 0)
return null;
rtn.Add(nextn.Select(r => r.val).ToList());
var children = getNextLevel(nextn);
if (children != null && children.Count > 0)
{
foreach (var item in children)
rtn.Add(item);
}
return rtn;
}