题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

题解

不像前、中、后序遍历,它要求一层一层地遍历

利用一个辅助队列,弹出父节点的同时,将它的左右孩子加入队列

时间复杂度: O(N)- 空间复杂度: O(N)

public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
    ArrayList<Integer> res = new ArrayList<>();
    if (root == null)
        return res;

    Deque<TreeNode> deque = new LinkedList<>();
    deque.add(root);
    while (!deque.isEmpty()){
        TreeNode node = deque.pop();
        res.add(node.val);

        if (node.left != null)
            deque.add(node.left);
        if (node.right != null)
            deque.add(node.right);
    }
    return res;
}