20.从上往下打印出二叉树: 从上往下打印出二叉树的每个结点,同一层的结点按照从左向右的顺序打印。

一、题目
从上往下打印出二叉树的每个结点,同一层的结点按照从左向右的顺序打印。
二、解题思路
这道题实质是考查树的遍历算法。从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点, 则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。

/**
     * 从上往下打印出二叉树的每个结点,向一层的结点按照从左往右的顺序打印。
     * 例如下的二叉树,
     *       8
     *    /    \
     *   6     10
     *  /  \   / \
     * 5   7  9  11
     * 则依次打印出8、6、10、5、7 、9、11.
     *
     * @param treeNode  树的根结点
     */
   public ArrayList<Integer> PrintFromTopToBottom(TreeNode treeNode) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        if (treeNode == null) {
            return arrayList;

        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(treeNode);

        while (!queue.isEmpty()) {

            TreeNode node = queue.poll();

            if (node.left != null) {
                queue.add(node.left);

            }
            if (node.right != null) {
                queue.add(node.right);

            }

            arrayList.add(node.data);

        }
        return arrayList;


    }



   public class TreeNode {
        public int data;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int data) {
            this.data = data;
        }

        @Override
        public String toString() {
            return "TreeNode{" +
                    "data=" + data +
                    ", left=" + left +
                    ", right=" + right +
                    '}';
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值