知识点/数据结构:二叉树
题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:
考察的实质是:考查树的遍历算法:按层打印的顺序应该是从根节点开始;
对于上图中的树:
1:先打印根节点8,同时把跟根节点的子节点6和10保存到容器中;
2:从容器中取出值为6 的节点,打印该节点后把它两个值为5和7的两个子节点存到容器之中,对值为10 的节点进行同样的操作;
3:重复2的步骤,值为5,7,9,11的节点没有子节点直接打印即可。总结上述过程,发现上述过程的特点是先进先出,因此不难发现这个容器的数据结构应该选取队列
总结上述过程:每次打印以一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个对列的队尾。接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直至队列中所有的节点被打印出来。
import java.util.ArrayList;//2018年5月9号自己编写
import java.util.Deque;
import java.util.LinkedList;
public class Solution{
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root){
ArrayList<Integer> list = new ArrayList<Integer>();
if(root==null) return list;
Deque <TreeNode> xx = new LinkedList<TreeNode>();
xx.add(root);
while(!xx.isEmpty()){
TreeNode temp = xx.pop();//
list.add(temp.val);//这两行是关键
if(temp.left!=null){
xx.add(temp.left);
}
if(temp.right!=null){
xx.add(temp.right);
}
}
return list;
}
}
过程中出现的错误:
四个错误:
树节点是t而不是Root Deque是接口不可以实例化对象;
方法isEmpty();
if 判断的是左右子树;
Deque是一个接口 下面是他的继承类