当前位置: 首页 > news >正文

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

目录

深度优先算法(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)

相关文章:

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

目录 深度优先算法&#xff08;Depth-First Search&#xff0c;DFS&#xff09; LeetCode之路——102. 二叉树的层序遍历 分析 深度优先算法&#xff08;Depth-First Search&#xff0c;DFS&#xff09; DFS是一种用于遍历或搜索树状数据结构的算法&#xff0c;其中它首先探…...

华为昇腾NPU卡 ChatGLM2模型使用

参考&#xff1a;https://gitee.com/mindspore/mindformers/blob/dev/docs/model_cards/glm2.md#chatglm2-6b 1、安装环境&#xff1a; 昇腾NPU卡对应英伟达GPU卡&#xff0c;CANN对应CUDA底层&#xff1b; mindspore对应pytorch&#xff1b;mindformers对应transformers 本…...

【机器学习】集成模型/集成学习:多个模型相结合实现更好的预测

1. 概述 1.1 什么是集成模型/集成学习 "模型集成"和"集成学习"是相同的概念。它们都指的是将多个机器学习模型组合在一起&#xff0c;以提高预测的准确性和稳定性的技术。通过结合多个模型的预测结果&#xff0c;集成学习可以减少单个模型的偏差和方差&am…...

如何提高广告投放转化率?Share Creators 资产库与Appsflyer营销数据的全面结合

如何提高广告投放转化率&#xff1f;Share Creators 资产库与Appsflyer营销数据的全面结合 全球经济进入了低迷期。 营销成本越来越高&#xff0c; 营销需要更务实&#xff0c;注重投入产出比。众所周知&#xff0c;除了渠道、客群画像以外&#xff0c; 优秀的广告设计图&#…...

《软件方法》2023版第1章(11)1.4.3 具体工作步骤

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.4 应用UML的建模工作流 1.4.3 使用UML建模的工作流步骤 图1-17中“工件形式”一列所列出的图就是本书推荐的在建模工作流ABCD中的UML用法&#xff0c;我用活动图进一步表示建模的步…...

git将当前分支A强制推送远程分支pro上

前言 开发中基于线上分支pro创建了A分支&#xff0c;开发完成之后。又基于线上分支pro创建了B分支&#xff0c;都以此合并到测试分支&#xff0c;两个分支更改中都动用部分共同的文件&#xff0c;这就导致后续开发合并代码越来越乱&#xff0c;这时你想把本地开发的分支强推到…...

【计算机基础】存储器

目录 一.概念二.分类1&#xff0e;按存储介质分类2&#xff0e;按存储方式分类3&#xff0e;按存储器的读写功能分类4&#xff0e;按信息的可保存性分类5&#xff0e;按在计算机系统中的作用分类 三.主存区分SRAM、DRAM、Flash、DDR1.SRAM&#xff08;静态随机存储器&#xff0…...

【LCR 159. 库存管理 III】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int getrandom(int left,int right,vector<int>& stock){return stock[rand()%(right-left1)left];}void qsort(int l,int r,vector<int>& s…...

Android ADB 常见问题和注意事项

Android ADB 常见问题和注意事项 在使用 ADB 过程中&#xff0c;可能会遇到一些常见问题和需要注意的事项&#xff1a; 1. USB 调试 要使用 ADB&#xff0c;你需要在设备上启用 USB 调试模式。这通常在设备的开发者选项中设置。如果你不能看到开发者选项&#xff0c;可以在设…...

TCP/IP五元组

什么是五元组规则&#xff1f; 五元组是通信术语&#xff0c;英文名称为five-tuple,或5-tuple&#xff0c;五元组包括源IP地址(source IP)、源端口(source port)、目的IP地址(destination IP)、目的端口(destination port) 和 传输层协议(the layer 4 protocol)的五个量集合。…...

aiohttp ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] 错误处理

这个问题原因吧其实就是3.10 开始官网更新了TLS 堆栈默认安全设置 感兴趣的可以看下链接 python官网叙述: Python 3.10 增加了 TLS 堆栈的默认安全设置 解决也很简单&#xff0c;将ssl安全等级降下来就行&#xff0c;例如&#xff1a; import ssl import aiohttp ctx ssl.cr…...

分析RPA流程自动化的挑战和解决方案

随着数字化工具和自动化解决方案的日益成熟&#xff0c;各行各业发掘到RPA机器人流程自动化技术的先进性&#xff0c;逐渐规模化部署RPA。 为了更好地推进RPA的实施&#xff0c;金智维在这里分享一些运用这项技术时面临的共同挑战&#xff0c;并给出针对性的解决方案。 组织架构…...

我试图扯掉这条 SQL 的底裤。只能扯一点点,不能扯多了

之前不是写分页嘛,分页肯定就要说到 limit 关键字嘛。 然后我啪的一下扔了一个链接出来: https://dev.mysql.com/doc/refman/8.0/en/limit-optimization.html 这个链接就是 MySQL 官方文档,这一章节叫做“对 Limit 查询的优化”,针对 limit 和 order by 组合的场景进行了较…...

LeNet(pytorch实现

LeNet 本文编写了一个简单易懂的LeNet网络&#xff0c;并在F-MNIST数据集上进行测试&#xff0c;允许使用GPU计算 在这里插入代码片 import torch from torch import nn, optim import d2lzh_pytorch as d2ldevice torch.device(cuda if torch.cuda.is_available() else cp…...

Selenium获取百度百科旅游景点的InfoBox消息盒

前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒&#xff0c;同样可以通过Spider获取网站内容&#xff0c;最近学习了SeleniumPhantomjs后&#xff0c;准备利用它们获取百度百科的旅游景点消息盒&#xff08;InfoBox&#xff09;&#xff0c;这也是毕业设计实体对齐和属…...

springcloud笔记 (8) -网关 Gateway

网关 出国需要过海关 网关&#xff1a;网络的关卡 网关的作用 1&#xff1a;路由转发 2&#xff1a;安全控制 保护每个服务&#xff0c;不需要将每个暴露出去 3&#xff1a;负载均衡 1.没有网关&#xff1a;客户端直接访问我们的微服务&#xff0c;会需要在客户端配置很多…...

【C++编程语言】STL常用算法 算术生成和集合算法

1.算术生成算法概念 算法简介&#xff1a; accumlate 计算容器元素累计总和fill 向容器中添加元素 注意&#xff1a;算术生成算法属于小型算法 使用时包含头文件为#include<numeric> 2.accumulate /*函数原型&#xff1a;int accumulate(iterator beg ,iterator end…...

解放双手:VMLogin自动化工具的高效便捷

在现代工作环境中&#xff0c;时间和效率是我们追求的关键。幸运的是&#xff0c;随着技术的发展&#xff0c;自动化工具为我们提供了解放双手的机会。其中&#xff0c;防关联浏览器的自动化就是一种强大的工具&#xff0c;能够简化我们的工作流程并提升效率。本文将探讨浏览器…...

深度解析网络代理技术及其在网络安全和爬虫应用中的关键作用

在当今数字化时代&#xff0c;网络代理技术在维护网络安全、保护隐私以及实现高效数据获取方面发挥着不可或缺的作用。本文将全面解析Socks5代理、IP代理等关键技术&#xff0c;并探讨其在网络安全和爬虫开发中的重要作用。 1. Socks5代理与SK5代理&#xff1a;多功能代理协议…...

寻找二叉树的最低公共祖先节点

两个节点沿二叉树向上找&#xff0c;找到的第一个公共的节点 例&#xff1a;D和F之间的最低公共节点&#xff1a;B D → B&#xff1b; F → E → B&#xff1b; E和G最低公共节点&#xff1a;A E → B → A&#xff1b; G → C → A&#xff1b; B和F最低公共节点&#xff…...

手把手教你用Skyline引擎实现丝滑的小程序交互动画(附左滑删除完整代码)

手把手教你用Skyline引擎实现丝滑的小程序交互动画&#xff08;附左滑删除完整代码&#xff09; 在移动应用开发中&#xff0c;流畅的动画效果是提升用户体验的关键因素。微信小程序的Skyline引擎为开发者提供了突破性的性能提升&#xff0c;特别适合实现复杂的手势交互和动画效…...

OPC研究院介绍

OPC研究院介绍一、定位与使命OPC研究院&#xff08;全称&#xff1a;专知智库OPC研究院&#xff09;是专知智库旗下专注于意义文明基础设施建设的核心研究机构。它以“OPC”为核心理念&#xff0c;致力于推动意义从哲学概念走向社会实践&#xff0c;从个体体验到可流通资产&…...

边缘计算未来展望

边缘计算未来展望&#xff1a;重塑数字世界的智能边界 在万物互联的时代&#xff0c;数据洪流正以前所未有的速度增长。传统云计算的中心化处理模式已难以满足实时性、低延迟和隐私保护的需求&#xff0c;边缘计算应运而生&#xff0c;成为技术演进的关键方向。通过将计算能力…...

Phi-4-mini-reasoning行业方案:法律条文因果推理与判例匹配应用

Phi-4-mini-reasoning行业方案&#xff1a;法律条文因果推理与判例匹配应用 1. 模型概述 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。该模型以"小参数、强推理、长上下文、低延迟"为特…...

中文提示词友好:Neeshck-Z-lmage_LYX_v2实测,描述越详细效果越好

中文提示词友好&#xff1a;Neeshck-Z-lmage_LYX_v2实测&#xff0c;描述越详细效果越好 1. 引言&#xff1a;中文提示词与AI绘画的默契 作为一名长期使用各类AI绘画工具的技术爱好者&#xff0c;我发现一个有趣的现象&#xff1a;许多用户在输入提示词时&#xff0c;往往过于…...

Rust 宏系统的构建方式

Rust宏系统的构建方式&#xff1a;解锁元编程的魔法钥匙 Rust的宏系统是其元编程能力的核心&#xff0c;它允许开发者在编译时生成和操作代码&#xff0c;从而提升代码的复用性和表达力。与C/C的文本替换宏不同&#xff0c;Rust的宏系统基于语法树操作&#xff0c;兼具安全性与…...

SOONet实战避坑:视频音频流干扰处理、黑边裁剪、帧率不一致应对

SOONet实战避坑&#xff1a;视频音频流干扰处理、黑边裁剪、帧率不一致应对 你是不是也遇到过这种情况&#xff1a;好不容易部署好了SOONet&#xff0c;上传了一段精心准备的视频&#xff0c;满怀期待地输入描述&#xff0c;结果要么定位不准&#xff0c;要么直接报错&#xf…...

次元画室微信小程序开发:打造个人AI画室轻应用

次元画室微信小程序开发&#xff1a;打造个人AI画室轻应用 想随时随地用手机把照片变成动漫风、油画风或者任何你喜欢的艺术风格吗&#xff1f;自己动手开发一个微信小程序&#xff0c;把“次元画室”这样的AI绘画模型装进口袋&#xff0c;听起来是不是很酷&#xff1f;今天&a…...

Dify+Ollama模型搭建攻略:本地环境实战指南悦

Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的&#xff0c;以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成&#xff0c;将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...

Linux I/O 演进史:从管道到零拷贝,一篇串起个服务端核心原语劣

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时&#xff0c;输出结果中包含大量由集群自动生成的元数据&#xff08;如 managedFields、resourceVersion、uid 等&#xff09;。这些信息在实际复用 yaml 清单时需要手动清理&#xff0c;增加了额外的工作量。 使用 kube…...