题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。算法地址
我感觉可以自己先做做,你说呢!!!!!!
解题思路
这道题明显是树的层序遍历问题,层序遍历需要使用队列辅助数据的遍历。
先看一个颗二叉树
这颗树的层序遍历结果是,FCEADHGBM
我们使用队列,利用先进先出的特性,每次队头拿出一个结点,再往队尾插入这个结点的左右子元素。
举个栗子
模拟一下这个过程:
插入F
输出F,插入子节点CE
输出C,插入子节点AD
输出E,插入子节点HG
输出A,没有子节点,不插入
输出D,插入子节点B
输出H,没有子节点,不插入
输出G,插入子节点M
输出B,没有子节点,不插入
输出M,没有子节点,不插入
这样就完成了输出,FCEADHGBM
代码
public class Solution {
public ArrayList PrintFromTopToBottom(TreeNode root) {
//辅助的队列
ArrayList a = new ArrayList<>();
ArrayList result = new ArrayList<>();
if(root == null){
return result;
}
a.add(root);
while(a.size() != 0){
TreeNode node = a.get(0);
if(node.left!=null){
a.add(node.left);
}
if(node.right!=null){
a.add(node.right);
}
result.add(node.val);
a.remove(node);
}
return result;
}
}