剑指Offer 23 从上往下打印二叉树

本文介绍了一种从上到下、从左到右打印二叉树各结点的算法。利用队列实现层次遍历,确保同一层的结点按顺序输出。通过实例演示了如何使用队列进行二叉树的层次遍历。

题目

从上往下打印出二叉树的每个结点,同一层的结点从左到右的顺序打印。

思路

  1. 要求同一层的结点从左向右顺序打印,可以想到队列;
  2. 对于根节点,压入队列的顺序是先左结点,后右结点;考虑第二层,左子树的左结点、右结点进入队列,此时队列第一位为右子树根节点,故将右子树的左结点和右结点压入队列,可以看到第三层是有序的
  3. 按照数学归纳法,假设第k层是有序的,队列中存储着有序的第k层的各个结点,递推到第k+1层时,根据队列先入先出的特性,第k+1层也是有序的。
  4. 注意边界条件:
    仅当结点不为null时将结点压入队列;
    输入结点为null。
import datastructure.search.BiTreeNode;

import java.util.LinkedList;
import java.util.Queue;

public class Q23PrintFromTopToBottom {
    public static void printFromTopToBottom(BiTreeNode root){
        if (root==null)
            return;
        Queue<BiTreeNode> queue=new LinkedList<BiTreeNode>();
        queue.offer(root);
        while (!queue.isEmpty()){
            BiTreeNode temp=queue.poll();
            System.out.println(temp.data);
            if (temp.leftChild!=null) {
                queue.offer(temp.leftChild);
            }
            if (temp.rightChild!=null) {
                queue.offer(temp.rightChild);
            }
        }
    }

    public static void main(String[] args) {
        int[] array={3,2,1,4,5};
        BiTreeNode root=BiTreeNode.create(array);
        printFromTopToBottom(root);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值