题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路
其实就是从上往下横着打印,即二叉树的层次遍历,初看到时想到用递归,但是递归是一层层的往下深入,没办法直接遍历兄弟结点,这里要想办法存储当前节点,然后打印出当前节点后,依次按顺序再往下从左到右打印,所以借助arraylist来模拟一个队列。
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root){
ArrayList<Integer> list = new ArrayList<>(); //最终返回的列表
ArrayList<TreeNode> queue = new ArrayList<>(); //辅助队列
if(root == null)
return list;
queue.add(root); // 首先把根节点加进去
while(queue.size() != 0){ // 队列不为空,就继续遍历
TreeNode temp = queue.remove(0); // 移出第一个对象,并且返回这个对象
if(temp.left != null)
queue.add(temp.left);
if(temp.right != null)
queue.add(temp.right);
list.add(temp.val)
}
return list;
}
}