题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
1、思路分析
从左至右的顺序打印联想到队列这种数据结构,但仍需注意入队和出队的逻辑。首先将根节点添加进队列,接着进行当队列不为空的循环,在循环里,先弹出队首元素,并将其保存在值TreeNode类型的t中,因为后续我们还需获得t的左右结点情况,将t添加进list中,并将t的左右结点依次入队,至此,一次循环的操作结束。此外,还需注意队列这种数据结构的基本操作。
2、代码

import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<>();
        if(root == null) return list;
        Deque<TreeNode> deque = new LinkedList<>();
        deque.add(root);
        while(!deque.isEmpty()) {
            TreeNode t = deque.pop(); // 注意需要保存一次弹出的结点
            list.add(t.val);
            if(t.left != null) deque.add(t.left);
            if(t.right != null) deque.add(t.right);
        }
        return list;
    }
}