二叉树层序遍历实现

二叉树层序遍历实现二叉树的层序遍历下图是一个简单的二叉树例图实现思路:1.创建一个队列用于二叉树的层序遍历。2.将二叉树根节点插入队列中。3.通过while循环遍历二叉树,直至遍历完整个二叉树后则结束循环。4.每次循环开始时先进行出队操作,若当前出队元素为null则证明已经完成层序遍历结束循环循环,若不为null则打印该节点的值,并判断该节点是否存在左右子树,若存在则依次插入队列中。图解上述二叉树的层序遍历过程依次进行图上操作直至最终队列为空时则层序遍历结束。实现代码如下:classTreeNod

大家好,又见面了,我是你们的朋友全栈君。

二叉树的层序遍历

下图是一个简单的二叉树例图

在这里插入图片描述

实现思路:

1.创建一个队列用于二叉树的层序遍历。

2.将二叉树根节点插入队列中。

3.通过while循环遍历二叉树,直至遍历完整个二叉树后则结束循环。

4.每次循环开始时先进行出队操作,若当前出队元素为null则证明已经完成层序遍历结束循环循环,若不为null则打印该节点的值,并判断该节点是否存在左右子树,若存在则依次插入队列中。

图解上述二叉树的层序遍历过程

在这里插入图片描述

在这里插入图片描述

依次进行图上操作直至最终队列为空时则层序遍历结束。

实现代码如下:

class TreeNode{ 
   
    int val;
    TreeNode left;
    TreeNode right;

    public TreeNode(int val) { 
   
        this.val = val;
    }
}
public class day_0410 { 
   
    public static void main(String[] args) { 
   
        TreeNode a=new TreeNode(1);
        TreeNode b=new TreeNode(2);
        TreeNode c=new TreeNode(3);
        TreeNode d=new TreeNode(4);
        TreeNode e=new TreeNode(5);
        TreeNode f=new TreeNode(6);
        TreeNode g=new TreeNode(7);
        a.left=b;
        a.right=c;
        b.left=d;
        b.right=e;
        c.left=f;
        c.right=g;
        level(a);
    }
public static void level(TreeNode root){ 
   
    if (root==null){ 
   
        return;
    }
    Queue<TreeNode> queue=new LinkedList<>();
    //将根节点插入队列中
    queue.offer(root);
    while (true){ 
   
        //创建一个临时变量cur存储出队元素
        TreeNode cur=queue.poll();
        //当没有元素可以出队时则代表已经层序遍历结束,跳出循环
        if (cur==null){ 
   
            break;
        }
        //打印当前节点的值
        System.out.print(cur.val);
        //当前出队节点拥有左子树则将左子树入队
        if (cur.left!=null){ 
   
            queue.offer(cur.left);
        }
        //当前出队节点拥有右子树则将右子树入队
        if (cur.right!=null){ 
   
            queue.offer(cur.right);
        }
     }
  }
}

运行结果如下所示:

在这里插入图片描述

如有不足还请指正,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143385.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月11日 下午12:00
下一篇 2022年5月11日 下午12:00


相关推荐

  • awakeFromNib小总结「建议收藏」

    awakeFromNib小总结「建议收藏」awakeFromNib在使用IB的时候才会涉及到此方法的使用,当.nib文件被载入的时候,会发送一个awakeFromNib的消息到.nib文件里的每一个对象,每一个对象都能够定义自己的awakeF

    2022年7月1日
    36
  • PHP smarty

    PHP smarty<?php/*一、什么是smarty?smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的

    2022年7月1日
    25
  • 使用mybatis注解解放xml

    使用mybatis注解解放xml我们以前写 mybatis 的 dao 的时候 基本上都是使用的 xml 文件来处理的 xml 相对来讲 一般的比较复杂点的单表还好点 但是简单的增删改查 使用 xml 就有点重了 所以后来就出现了 mybatis plus 之类的框架 但是有些业务使用 mybatis plus 在效率方面还是有点不太好看 例如批量功能 mybatis plus 的批量是一条条操作的 如果数据太大 可能就是个悲伤的故事 如果要自己写 一般就使用 dao 在 xml 中使用 sql 语句来实现 操作流程 1 先写个测试 SQ

    2026年3月18日
    1
  • vue改写数组方法_vue数组添加和删除

    vue改写数组方法_vue数组添加和删除Vue将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括:push()pop()shift()unshift()splice()sort()reverse()以上七个数组都会改变原数组,下面来分别讲解它们的区别:varlist=[3,4,5,6]1.push()向数组的尾部添加若干元素,并返回数组的新长度;list.push(7,8)…

    2025年11月21日
    5
  • WSAStartup( )详解

    WSAStartup( )详解这里用通俗的语言解释一下这个函数 就类似于 opencv 一样 要添加链接库函数 cv lib 等 要添加到附加依赖项 或者通过 pragmacommen lib cv lib 一样 然后才能包含头文件进行各种函数的调用 当然了 socket 编程要调用各种 socket 函数 但是需要库 Ws2 32 lib 和头文件 Winsock2 h 这里的 WSAStartup 就是为了向操作系统说明 我们要用哪个库

    2026年3月19日
    2
  • nginx的四个基本功能

    nginx的四个基本功能

    2021年10月29日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号