剑指 Offer 32 - I. 从上到下打印二叉树
题目描述:
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回:
[3,9,20,15,7]
做这题之前,先补一点C#里面队列queue和列表list的知识
Queue是队列,即“先进先出”的一个数据结构,数据从一端进入,从另外一端输出
新建队列的方法:
Queue queue= new Queue();
Queue
Queue类中的一些方法如下:
List类是Arraylist类的泛型等效类,该类别可以根据需要动态地改变内存
List类下的类成员如下:
有了这些基础之后,再来看这道题
这题要顺序输出二叉树,即前序遍历(根-左-右)一个二叉树。那么可以用一个队列来存储,先存根节点,再存左子树,再存右子树。哪个结点没有了(==null)就不用存了。若二叉树本就是个空树,那么就直接输出一个空数组即可。
代码如下:
public class Solution {
public int[] LevelOrder(TreeNode root) {
if(root==null) return new int[0];
var res = new List();
var queue = new Queue();
queue.Enqueue(root);
while(queue.Count>0){
var node = queue.Dequeue();
res.Add(node.val);
if(node.left!=null){
queue.Enqueue(node.left);
}
if(node.right!=null){
queue.Enqueue(node.right);
}
}
return res.ToArray();
}
}
ps:本文的知识拓展来源于
)_leonardo_Davinci的博客-CSDN博客">C# 集合( Stack和Queue 、Dictionary、 ArrayList和List
剑指offer中还有一题和这题十分相似,几乎一摸一样,唯一不同的就是输出格式不同
剑指 Offer 32 - II. 从上到下打印二叉树 II
题目描述:同上题,但要求不要输出int[]格式,而是要输出一个二维列表IList>()
二维列表添加的语句和一维列表相同,都是Add,只是一维列表添加的是数,二维列表添加的是一维列表。
完整代码如下:
public class Solution {
public IList> LevelOrder(TreeNode root) {
var res = new List>();
if(root == null) return res;
var queue = new Queue();
queue.Enqueue(root);
while(queue.Count>0){
List list = new List();
for(int i = queue.Count;i>0;i--){
TreeNode node = queue.Dequeue();
list.Add(node.val);
if(node.left!=null){
queue.Enqueue(node.left);
}
if(node.right!=null){
queue.Enqueue(node.right);
}
}
res.Add(list);
}
return res;
}
}
结果如下:



