题目:
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
示例:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
题解:
显而易见,使用BFS(广度优先搜索)来遍历二叉树,利用队列的先进先出特性来存储当前遍历节点。
算法流程:
1.root为空直接返回空数组
2.初始化队列,与存储节点值的list。root节点入列。
3.BFS循环。当队列为空跳出循环。
a.出列:队列首节点值存入list。
b.添加子节点:将当前节点的子节点入列。
4.将list转为数组返回即可。
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x) { val = x; }
}
public class Solution
{
public int[] LevelOrder(TreeNode root)
{
//根节点为空 直接返回空数组
if(root == null)
{
return new int[]{};
}
//初始化队列与list
Queue queue = new Queue();
queue.Enqueue(root);
List<int> list = new List<int>();
//BFS循环
while(queue.Count != 0)
{
//queue返回为object类型,需强制转为TreeNode类型
TreeNode temp = (TreeNode)queue.Dequeue();
list.Add(temp.val);
if(temp.left != null)
{
queue.Enqueue(temp.left);
}
if(temp.right != null)
{
queue.Enqueue(temp.right);
}
}
//list转为数组
int[] res = new int[list.Count];
for(int i=0;i< res.Length;i++)
{
res[i] = list[i];
}
return res;
}
}