二叉树的层次遍历
解题思路:
由上往下层次遍历再反转顺序。
代码:
public IList<IList<int>> LevelOrderBottom(TreeNode root)
{
IList<IList<int>> result = new List<IList<int>>();
Queue<TreeNode> queue = new Queue<TreeNode>();//用来存储要遍历的那一层。
Queue<TreeNode> temp = new Queue<TreeNode>();//用来存储添加的上一层。
if (root != null)
queue.Enqueue(root);
while (queue.Count > 0)
{
IList<int> list = new List<int>();
while (queue.Count > 0)
{
TreeNode lgx = queue.Dequeue();
list.Add(lgx.val);
temp.Enqueue(lgx);
}//每一次把queue中全部元素拿出来作为一层。
result.Add(list);//存进结果中。
while (temp.Count > 0)
{
TreeNode lgx2 = temp.Dequeue();
if (lgx2.left != null)
queue.Enqueue(lgx2.left);
if (lgx2.right != null)
queue.Enqueue(lgx2.right);
}//找这一层下面一层有哪些元素。
}//知道queue中没有元素。
return result.Reverse().ToList();//最后反转顺序。
}