二叉树的层次遍历

🎈目录🎈

1、层次遍历

2、方法实现思路🙆‍♂️

总结:

3、代码实现


1、层次遍历

        层次遍历就是即逐层地,从左到右访问所有节点。如下

2、方法实现思路

       对于层序遍历,无疑是一层一层结点查找。那我们能不能找一个队列,把每一层的结点依次放入队列中,这样我们就能实现程序遍历啦。

        首先创建一个队列,然后把根节点放入队列中。

        接着就把 queue 的头结点弹出,也就是A,放到 cur中去,并打印。此时 cur 指向 A结点

cur 设置的目的:方便我们把下一层结点结点放到队列当中。

队列特点: 先进先出。

        我们判断 cur 的左结点是否为空,如果不为空就把左结点放入队列中。同时我们也要判断cur的右节点,操做相同。

 每弹出一个结点,就会把该节点的左右孩子插入到队列中(左右孩子不为空的情况下!),然后弹出队列头结点。

        也就是一层一层遍历,比如遍历完B后,把B的左右孩子放到C的后面,直到遍历完C后(第二层)才会遍历B的左右孩子(第三层)。

总结:

  1. 定义一个队列,把root根节点放入队列中。      
  2. 弹出对头节点,并遍历打印。
  3. 判断当前节点的左右孩子是否为null,如果不为null,则入队。
  4. 检测队列,如果队列为空,则说明层序遍历结束。 

层次遍历对于二叉树来说算是比较基础的一种算法,其拓展了许多。例如判断二叉树是否为满二叉树等。

        大家还可以去做 leetcode 做一下这道题加以巩固:二叉树的层序遍历

3、代码实现

import java.util.Queue;//导入队列的包

public class BinaryTree {
    //内部类
    static class TreeNode {
        public char val;
        public TreeNode left;//左孩子的引用
        public TreeNode right;//右孩子的引用

        public TreeNode(char val) {
            this.val = val;
        }
    }


    /**
     * 创建一棵二叉树 返回这棵树的根节点
     *
     * @return
     */
    public TreeNode createTree() {
        TreeNode A = new TreeNode('A');
        TreeNode B = new TreeNode('B');
        TreeNode C = new TreeNode('C');
        TreeNode D = new TreeNode('D');
        TreeNode E = new TreeNode('E');
        TreeNode F = new TreeNode('F');
        TreeNode G = new TreeNode('G');
        TreeNode H = new TreeNode('H');

        A.left = B;
        A.right = C;
        B.left = D;
        B.right = E;
        C.left = F;
        C.right = G;
        E.right = H;
        return A;
    }
 
    //层序遍历
    void levelOrder(TreeNode root) {
        if(root == null) return;
        Queue<TreeNode> queue = new LinkedList<>();

        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode cur = queue.poll();
            System.out.print(cur.val);
            if(cur.left != null){
                queue.offer(cur.left);
            }
            if(cur.right != null){
                queue.offer(cur.right);
            }
        }
    }



    public static void main(String[] args) {
        BinaryTree bt = new BinaryTree();
        TreeNode root = bt.createTree();
        bt.levelOrder(root);
    }
}

代码中树的形状,和代码结果如下 

 

 注:

        Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。

        在使用时我们要导入 import java.util.Queue ;

Queue中的方法:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱躺平的威威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值