剑指offer.32-从上到下打印二叉树

题目:从上到下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如下图中的二叉树,则依次打印出[8,6,10,5,7,9,11]。二叉树节点的定义如下:

public class BinaryTreeNode {
    int value;
    BinaryTreeNode leftNode;
    BinaryTreeNode rightNode;

    public BinaryTreeNode(int value) {
        this.value = value;
        this.leftNode = null;
        this.rightNode = null;
    }

}

本题的意思其实就是对一棵树进行广度优先遍历。要想一层一层往下遍历,那么应该在遍历到根节点打印的同时,记录好它的左右子节点;然后依次取出左右子节点打印的同时,记录它们各自的左右子节点...如果要实现这样的效果,我们可以使用一个队列来记录和打印这些节点。结合本题例子,大致操作过程如下图:

每次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直至队列中所有的节点都被打印出来。

下面代码我们使用的是LinkedList当作队列(offer()和remove()方法分别做队列元素的放入和取出操作),使用ArrayList作为打印输出的集合。

class Solution32 {
    public void printFromTopToBottom(BinaryTreeNode root) {
        if (root == null) return;

        Queue<BinaryTreeNode> queue = new LinkedList<>();
        List<Integer> list = new ArrayList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            BinaryTreeNode node = queue.remove();
            list.add(node.value);
            if (node.leftNode != null) {
                queue.offer(node.leftNode);
            }
            if (node.rightNode != null) {
                queue.offer(node.rightNode);
            }
        }

        System.out.println(list);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值