关于二叉树BFS、DFS的总结

1 BFS、DFS算法的定义

BFS:广度优先搜索算法,也可称为层序遍历,按照二叉树的层次进行访问,可采用队列保存每一层的节点。

DFS:深度优先搜索算法,尽可能深的搜索树的分支,当当前节点所在的边都被访问过,回溯至发现当前节点边的起始节点,一直进行至源节点可达的所有节点为止。

2 二叉树的定义

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

    public TreeNode() {
    }

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

    public TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

3 采用BFS遍历二叉树的代码实现

  • 代码流程
  • 1.定义二叉树;
  • 2.初始化队列,root入队;
  • 3.循环遍历,当队列为空时跳出
    • 1.节点出队;
    • 2.如果左子节点不为空,左子节点入队;
    • 3.如果右子节点不为空,右子节点入队;

代码实现

public class BFSTree {
    public void bfsTree(TreeNode root){
        LinkedList queue =  new LinkedList<>();
        if (root != null) queue.add(root);
        while (!queue.isEmpty()){
            TreeNode node = queue.poll();
            if (node.left != null) queue.add(node.left);
            if (node.right != null) queue.add(node.right);
        }
    }
}

4 采用BFS遍历二叉树的代码实现

4.1 递归实现

树中常见的DFS可分为:先序遍历、中序遍历、后序遍历,这里使用先序遍历实现。

  • 代码流程
  • 1.定义二叉树
  • 2.递归终止条件:越过叶子节点;
  • 3.递归递推:本质是对树做先序遍历
    • 1.dfs(root.left);
    • 2.dfs(root.right);

代码实现

public class DFSTree{
    List list = new ArrayList<>();
    public void dfsTree(TreeNode root){
        if (root == null) return;
        list.add(root.val);
        dfsTree(root.left);
        dfsTree(root.s

Original: https://www.cnblogs.com/csrecord/p/16434133.html
Author: IWANNPEACE
Title: 关于二叉树BFS、DFS的总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714587/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 如何管理分布式团队

    如何管理分布式团队 如今,寻找和雇用所有必要的人才来建立你的数字产品是具有挑战性的。因此,许多企业选择替代解决方案,并将其项目的某些部分外包。因此,他们可以扩大专业知识,实现更大的…

    技术杂谈 2023年6月1日
    071
  • python数据可视化-matplotlib入门(7)-从网络加载数据及数据可视化的小总结

    除了从文件加载数据,另一个数据源是互联网,互联网每天产生各种不同的数据,可以用各种各样的方式从互联网加载数据。 一、了解 Web API Web 应用编程接口(API)自动请求网站…

    技术杂谈 2023年7月25日
    066
  • Java线程的6种状态转换

    Java线程的生命周期 与操作系统中线程的五种状态区分开,Java线程有以下6种状态: New 新建 Runnable 可运行 Blocked 阻塞 Waiting 等待 Time…

    技术杂谈 2023年7月24日
    067
  • HTML 学习杂记

    代码范例 Computer code定义计算机代码 css file li {color: black} p {color: blue} #url1:link {color:blu…

    技术杂谈 2023年5月30日
    069
  • 设计模式-责任链模式

    将各个功能拆分后分别封装(各功能解耦),需要时可 自由组合(包括执行顺序) 话不多说,看个优化案例吧。 优化案例 以下是模拟客户端想服务端发送请求的业务流程。 客户端调用代码如下。…

    技术杂谈 2023年7月11日
    050
  • blktrace 编译与使用【转】

    转自:https://www.cnblogs.com/linhaostudy/p/16182795.html 正文 在对ssd性能调优过程中,有使用到blktrace,本文对blk…

    技术杂谈 2023年5月30日
    0106
  • 【转】iOS AVPlayer的那些坑

    这次主要是总结和记录下视频播放遇到的坑,视频播放采用的是AVPlayer这个控件,语法大致如下: 一般说来,这里要监听AVPlayerItem的status属性: 如果是AVPla…

    技术杂谈 2023年6月1日
    089
  • crash命令 —— wr

    参考:https://crash-utility.github.io/help_pages/wr.html 用法: 需要具备对 /dev/mem设备节点的写权限。 写某个地址,默认…

    技术杂谈 2023年5月30日
    084
  • PowerBI开发 第21篇:关键因素(Key Influencer)

    关键因素(Key Influencer)图表能够帮助用户分析KPI的因素,并按照因素的重要性进行排名,也就是说,该图表可以查看哪些因素会影响到KPI,并计算出因素的相对重要性。使用…

    技术杂谈 2023年5月31日
    0114
  • Python3.11正式版,它来了!

    转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/b055fbf2.html 你好,我是测试蔡坨坨。 就在前几天,2022年10月24日,Python3….

    技术杂谈 2023年7月11日
    094
  • SpringBoot集成JWT(极简版)

    SpringBoot集成JWT(极简版) 在WebConfig配置类中设置接口统一前缀 import org.springframework.context.annotation….

    技术杂谈 2023年7月11日
    061
  • Spring Boot下的一种导入Excel文件的代码框架

    1、前言 ​ Spring Boot下如果只是导入一个简单的Excel文件,是容易的。网上类似的文章不少,有的针对具体的实体类,代码可重用性不高;有的利用反射机制或自定义注解,开发…

    技术杂谈 2023年6月21日
    084
  • 深入理解Apollo核心机制之灰度发布——创建灰度

    概述 ApolloPortal创建灰度后都做了什么呢?Apollo是如何维护主版本与灰度版本关系的呢? 其实创建灰度非常简单,可以看到下图中”Cluster&#8221…

    技术杂谈 2023年7月25日
    065
  • MyBatisPlus 入门教程,这篇很赞

    在之前的文章中我们经常使用MybatisPlus进行增删改查,可能有些小伙伴对mybatisplus不是很熟悉,今天特意出了一般入门级的教程,我自己也是一边学习一边写的,有什么地方…

    技术杂谈 2023年6月21日
    0123
  • find prune

    如果想查找某目录下的某些文件,但是想要避开某个目录,使用find 的-prune 但是-prune用法很严格,网上有很多文章介绍了它的用法,但是经过本人的实际使用,有些并不好用。 …

    技术杂谈 2023年6月1日
    0102
  • 用win-acme给windows服务器添加SSL(Let’s Encrypt)证书

    本文是我今天用win-acme给windows服务器添加SSL(Let’s Encrypt)证书的一个过程,主要是给我自己备忘的。 1.首先先在github上下载最新版…

    技术杂谈 2023年5月31日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球