Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
Have you met this question in a real interview?
Yes
Example
Given binary tree {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
Challenge 1: Using only 1 queue to implement it.
Challenge 2: Use DFS algorithm to do it.
Tips: C# Queue 操作 http://www.cnblogs.com/tianzhiliang/archive/2010/09/21/1832664.html
定理: Queue 和 BFS搭配使用; Stack 和 DFS搭配使用.
IList<IList<int>> result = new List<IList<int>>();
把树的node扔进queue, 然后循环输出, queue 先进先出
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public IList<IList<int>> LevelOrder(TreeNode root) {
IList<IList<int>> result = new List<IList<int>>();
if(root == null){
return result;
}
//1: 创建一个队列把启示节点放入
Queue<TreeNode> queue = new Queue<TreeNode>();
queue.Enqueue(root);
//2. while 队列不空,处理队列的节点并拓展出新的节点
while (queue.Count!=0){
IList<int> level = new List<int>();
int count = queue.Count;
for (int i = 0; i < count;i++){
TreeNode head = queue.Dequeue();
level.Add(head.val);
if (head.left != null){
queue.Enqueue(head.left);
}
if (head.right != null){
queue.Enqueue(head.right);
}
}
result.Add(level);
}
return result;
}
}