32二叉树——DFS深度优先遍历

news2024/11/18 19:48:21

目录

深度优先算法(Depth-First Search,DFS)

LeetCode之路——102. 二叉树的层序遍历

分析



深度优先算法(Depth-First Search,DFS)

DFS是一种用于遍历或搜索树状数据结构的算法,其中它首先探索树的深度,然后回溯并继续探索其他分支。在二叉树中,深度优先算法可以通过递归或使用栈来实现。有三种常见的深度优先遍历方式:前序遍历、中序遍历和后序遍历,每种方式都对节点的访问顺序略有不同。

以下是深度优先遍历的Java代码示例,包括前序遍历、中序遍历和后序遍历:

class TreeNode {
    int data;
    TreeNode left;
    TreeNode right;
​
    public TreeNode(int data) {
        this.data = data;
    }
}
​
// 前序遍历(Preorder DFS)
void preorderDFS(TreeNode node) {
    if (node == null) return;
    System.out.print(node.data + " "); // 先访问根节点
    preorderDFS(node.left); // 遍历左子树
    preorderDFS(node.right); // 遍历右子树
}
​
// 中序遍历(Inorder DFS)
void inorderDFS(TreeNode node) {
    if (node == null) return;
    inorderDFS(node.left); // 遍历左子树
    System.out.print(node.data + " "); // 访问根节点
    inorderDFS(node.right); // 遍历右子树
}
​
// 后序遍历(Postorder DFS)
void postorderDFS(TreeNode node) {
    if (node == null) return;
    postorderDFS(node.left); // 遍历左子树
    postorderDFS(node.right); // 遍历右子树
    System.out.print(node.data + " "); // 最后访问根节点
}
​

LeetCode之路——102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000]

  • -1000 <= Node.val <= 1000

分析

逐层地,从左到右访问所有节点,这种情景叫做树的层序遍历。匹配的算法是DFS(Depth-first search)和BFS(Breadth-first search)。

// DFS算法-前序遍历
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> resList = new ArrayList<List<Integer>>();
        dfsPreorder(root, 0, resList);
        return resList;
    }
    
     /**
     * 前序遍历的DFS
     * @param node
     * @param deep
     */
    public static void dfsPreorder(TreeNode node, int deep, List<List<Integer>> resList) {
        if (node == null) return;
        deep++;
​
        if (resList.size() < deep) {
            // 用resList的索引标记层数
            List<Integer> list = new ArrayList<>();
            resList.add(list);
        }
        resList.get(deep - 1).add(node.val);
​
        //左侧子节点遍历
        dfsPreorder(node.left, deep, resList);
        //右侧子节点遍历
        dfsPreorder(node.right, deep, resList);
    }
    
}
  • 时间复杂度:O(n)

  • 空间复杂度:O(n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1124820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决“您点击的链接已过期”;The Link You Followed Has Expired的问题

今天WP碰到一个坑。无论发布文章还是更新插件、更换主题都是这么一种状态“您点击的链接已过期”&#xff1b;The Link You Followed Has Expired 百度出来的答案都是修改post_max_size 方法1. 通过functions.php文件修复 这种方法更容易&#xff0c;只需将以下代码添加到Wor…

程序可以创建多少个用户界面对象?

有人提到这样一个问题&#xff1a;”一个程序最多可以注册多少个窗口类?” 问题的答案不是一个具体的数字。因为大多数用户界面对象都来自一个共享的内存池&#xff0c;我们称之为”桌面堆内存”。尽管我们可以计算一个最大的理论值&#xff0c;但是在实际的场景中&#xff0…

模仿企业微信界面

备注&#xff1a;未实现相关功能&#xff0c;仅模仿界面&#xff0c;不能作为商业用途&#xff0c;若有侵权&#xff0c;请联系删除。 <Window x:Class"模仿企业微信界面.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"…

身为网络工程师必考证书:华为HCIP认证!

为了找到一份心仪的工作&#xff0c;有的人选择入职前先自我提升考取贴合岗位需求的从业相关证书&#xff0c;进而面试并开始工作&#xff0c;有的人选择先从“基层”开始积累经验为首&#xff0c;先进入行业内夯实基础&#xff0c;学习和考证作为了工作“平稳”后的计划。 很…

Qt Creater 设计的登录注册界面 使用SQLite数据库

Qt Creater 设计的登录注册界面 使用SQLite数据库 案例截图 登录页面 注册页面 项目目录结构截图 代码 main.cpp #include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;//第一个是…

AUTOSAR通信篇 - CAN网络通信(七:Nm)

文章目录 基础功能NM协调器功能NM协调器功能的适用性保持协调总线活动总线关闭的协调嵌套子总线的协调关闭定时器的计算同步用例1 – 同步指令同步用例2-同步启动同步用例3 -同步网络睡眠示例 唤醒和中止协调关闭外部的网络唤醒协调唤醒协调关闭的中止 部分网络功能PNC位向量过…

高速电路设计----第三章(2)LVDS信号详解

一、TTL和CMOS不适用于高速电路设计的原因&#xff08;都是数字电路信号&#xff09; 原因&#xff1a; ①电平幅度较大&#xff0c;电平最低都达到了2.5V或者3.3V。因此信号沿变化所需要的时间很长。不适合大于200MHZ的信号。 ②容易被干扰&#xff0c;输出信号为单端&#xf…

Ubuntu OpenLDAP配置笔记

Ubuntu OpenLDAP配置笔记 问题&#xff08;需求&#xff09;LDAP服务端安装slapd和ldap-utils配置域名编辑hosts修改主机名验证增加一个域账号修改用户的密码 Linux桌面加域安装软件验证允许远程账号首次登录时自动创建HOME目录桌面登录 其它问题Ubuntu更新和安装太慢LDAP服务端…

安装了WinRAR,但是右键发现没有压缩选项,怎么办

我们安装了WinRAR之后想要压缩文件&#xff0c;但是右键点击文件之后发现并没有WinRAR压缩选项&#xff0c;这应该如何设置才能出现右键带有压缩选项呢&#xff1f;方法如下&#xff1a; 首先打开WinRAR&#xff0c;在上面功能中点击选项 – 设置 然后我们在设置界面中切换到集…

基于Restful的WebService

目录 Restful简介 1. 资源(Resources) 2. 表述性状态转移(Representational State Transfer) 3. URL(统一资源定位符) 4. 数据格式(Data Format) 5. 状态码(Status Codes) 6. 超媒体(Hypermedia) 7. 无状态性(Statelessness) 8. 资源关系(Resource Relationships) 9.…

WinCC趋势跨度设置(时间范围)

控件&#xff1a;输入输出域、组合框、按钮、实时趋势控件 输入输出域 对象名称&#xff1a;IOI 域类型&#xff1a;输入 组合框 对象名称&#xff1a;cb 索引与文本一一对应 按钮VB Sub OnClick(Byval Item) …

RustCC分享会|非凸科技与开发者共同探讨Rust安全进化

10月15日&#xff0c;非凸科技受邀参加RustCC联合多家开发者社区组织的Global Tour of Rust技术分享活动&#xff0c;旨在为Rust开发者提供交流互动的平台&#xff0c;分享Rust语言的知识、经验和最佳实践。 活动上&#xff0c;非凸科技成都分公司研发总监赵海峰以“Rust安全进…

【框架源码篇 05】Spring源码篇-ApplicationContext

Spring源码篇-ApplicationContext 前面通过手写IoC&#xff0c;DI、AOP和Bean的配置。到最后ApplicationContext的门面处理&#xff0c;对于Spring相关的核心概念应该会比较清楚了。接下来我们就看看在Spring源码中&#xff0c;对于的核心组件是如何实现的。 一、ApplicationC…

光环云入选“北京市算力互联互通试点参与企业”!

为进一步贯彻落实工业和信息化部等六部委联合印发的《算力基础设施高质量发展行动计划》&#xff0c;扩大北京市算力互联互通试点参与范围&#xff0c;助力建设全球数字经济标杆城市&#xff0c;北京市通信管理局组织相关专家对申报第二批参与试点企业开展评估&#xff0c;光环…

docker 部署服务案例

mysql Centos7为例 NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI_COLOR"0;31" CPE_NAME"cpe:/o:centos:cento…

mysql之通过表名来搜索库名

1、经常遇到查日志时候知道表名&#xff0c;但是不知道在哪个库下面&#xff0c;可以通过此sql语句查询。 SELECT * FROM information_schema.TABLES WHERE table_name tb_xxxxxx;

python之代理ip的配置与调试方法详解

代理IP在Python中是一种强大的工具&#xff0c;它可以用于隐藏真实IP地址、绕过访问限制、提高数据爬取和网络请求的效率等。下面将详细介绍Python中代理IP的配置与调试方法&#xff0c;帮助您更好地理解和应用代理IP。 1. 选择合适的代理IP 在使用代理IP之前&#xff0c;需要…

vtk 多边形绘制 vtkPolygon 三角形 矩形 多边形

vtk 可以通过 vtkPolygon 绘制 三角形 矩形 多边形 目录 vtk 可以通过 vtkPolygon 绘制 三角形 矩形 多边形 效果&#xff1a; 源码&#xff1a; 效果&#xff1a; 三角形 矩形&#xff1a; 多边形&#xff1a; 源码&#xff1a; #include "vtkAutoInit.h" VTK_M…

通过电脑操作安卓手机数据恢复最好的几个工具

在本次评测中&#xff0c;我将介绍适用于 PC (Windows 10/11) 的最佳 Android 数据恢复软件&#xff0c;它可以帮助您从通过 MTP 连接的手机或平板电脑上恢复文件和数据。 2023 年适用于 PC 和 Mac 的最佳安卓数据恢复软件 1、U1tData安卓数据恢复&#xff08;奇客软件&#xf…

599L是什么芯片,sot23-6封装591NW

60转5v-599L芯片具有以下特点&#xff1a; - 600mA的连续输出电流能力 - 宽输入工作范围&#xff0c;从4.5V至60V - 集成了80V、550mQ高侧和80V、350mQ低侧功率MOSFET开关 - 高达95%的效率 - 内部软启动功能&#xff0c;限制开机时的浪涌电流 - 内部补偿功能&#xff0c;减少外…