题目描述

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

答案

    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        if(root!=null){
            queue.add(root);
        }else return res;
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();
            res.add(node.val);
            if(node.left !=null){
                queue.add(node.left);
            }
            if(node.right!=null){
                queue.add(node.right);
            }
        }
        return res;
    }

解析

其实这道题的返回值已经给提示了,使用队列来实现这个功能

队列的特性是先进先出,我们先将根节点压入队列,随后对其左右子节点进行压入处理,每次循环都是poll队列,然后再将poll出结点的左右结点入队。

由于队列特性,所以可以实现从上到下,从左到右入队


醉后不知天在水,满船清梦压星河