二叉树的遍历算法

news/2024/9/20 7:36:35/ 标签: 算法, 数据结构

目录

1.二叉树结构

2.广度优先搜索二叉树(迭代算法

3.深度优先搜索二叉树(递归算法


1.二叉树结构

一个父结点,至多可以连接左右两个子节点

Java构造树结构——其实是 自定义树结点类型

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

2.广度优先搜索二叉树(迭代算法

原理 :(1)从上到下分层

            (2)每层从左往右

解答:

        (1)队列(先进先出)来迭代一层内的结点——更新队列,加入存在的左右子结点

        (2)直到下一层无结点,循环再停止——该层队列为空

        (3)每一层是检索 上一层更新的队列,但队列可能会在本层有新增结点——检索前先记录上一层队列数量,按此数量,一个个弹出队头并检索。

以下是示范代码:

  public List<List<Integer>> levelOrder(TreeNode root) {ArrayDeque<TreeNode> deque = new ArrayDeque<TreeNode>();List<List<Integer>> compeleteList = new ArrayList<>();if (root == null) {return compeleteList;}deque.offer(root);while (!deque.isEmpty()) {List<Integer> arrList = new ArrayList<>();int dSize = deque.size();for(int i=0;i<dSize;++i ){TreeNode node = deque.poll();if (node.left != null) {deque.offer(node.left);}if (node.right != null) {deque.offer(node.right);}arrList.add(node.val);}compeleteList.add(arrList);}return compeleteList;}

3.深度优先搜索二叉树(递归算法

这里以前序遍历为例子讲解:

        当前结点-》左子结点1-》左子结点2-》右子结点2-》右子节点1

设计思路:

(1)哪里进入下一层

(2)给上一层返回什么

(3)最底层终止条件

下例:在记录本层数据后,无需返回上一层值,直到有结点为空停止。

    ArrayList<Integer> list = new ArrayList<>();public void preorder(TreeNode root){if (root == null) {return;}list.add(root.val);preorder(root.left);preorder(root.right);}


http://www.ppmy.cn/news/1444113.html

相关文章

【ARM 裸机】模仿 STM32 驱动开发

1、修改驱动 对于 STM32 来说&#xff0c;使用了一个结构体将一个外设的所有寄存器都放在一起&#xff0c;在上一节的基础上进行修改&#xff1b; 1.1、添加清除 bss 段代码&#xff0c; 1.2、添加寄存器结构体 新建一个文件&#xff0c;命名imx6u.h&#xff0c;注意地址的连…

【金融数据接口】wind数据python使用教程

目录 &#xff08;1&#xff09;接口手册 &#xff08;2&#xff09;包安装与接口调用 &#xff08;3&#xff09;常用接口 A.获取k线数据(wsd) 参数说明 集成在options中的参数 传参细节说明 返回说明 示例说明 B.获取实时行情数据(wsq) C.获证券代码(wset) 代码获…

Redis 如何实现分布式锁

课程地址 单机 Redis naive 版 加锁&#xff1a; SETNX ${lockName} ${value} # set if not exist如果不存在则插入成功&#xff0c;返回 1&#xff0c;加锁成功&#xff1b;否则返回 0&#xff0c;加锁失败 解锁&#xff1a; DEL ${lockName}问题1 2 个线程 A、B&#…

溪谷软件:游戏联运有多简单?

游戏联运&#xff0c;即游戏联合运营&#xff0c;是一种游戏运营模式&#xff0c;涉及到多个平台或公司共同推广和运营同一款游戏。对于开发者而言&#xff0c;游戏联运的简化程度可能因具体情况而异&#xff0c;但以下是一些因素&#xff0c;使得游戏联运在某种程度上变得更加…

Qt xml示范

1.数据格式 #ifndef XML_DATA_H #define XML_DATA_H#include<QWidget>struct Student {int s_id;QString s_name;double s_math_score;double s_english_score;}; struct Teacher{int t_id;QString t_name;QVector<Student> t_students_v; };#endif // XML_DATA_H…

Elcomsoft iOS Forensics Toolkit: iPhone/iPad/iPod 设备取证工具包

天津鸿萌科贸发展有限公司是 ElcomSoft 系列取证软件的授权代理商。 Elcomsoft iOS Forensics Toolkit 软件工具包适用于取证工作&#xff0c;对 iPhone、iPad 和 iPod Touch 设备执行完整文件系统和逻辑数据采集。对设备文件系统制作镜像&#xff0c;提取设备机密&#xff08…

vue3前端请求后端接口动态渲染菜单

//获取数据 请求接口 export function parkEnterPrise(address: string, methods: string) { const res instance({ url: address, method: methods, }); return res; } //页面 <el-menu default-active"2" class"el-menu-vertical-demo" …

【打工日常】云原生之搭建个人文件分享的轻量小工具

一、Pingvin Share介绍1.Pingvin Share简介它是一个专注于文件分享的高颜值轻量小工具。2.Pingvin Share功能创建文件共享,你可以通过链接访问这些文件支持自定义链接的后缀部署非常简单(Docker部署2分钟搞定)没有文件大小的限制(只要你的硬盘够大)支持设置共享的到期时间…

美国洛杉矶站群服务器如何提高网站排名?

美国洛杉矶站群服务器怎么样?美国洛杉矶站群服务器如何提高网站排名?Rak部落小编为您整理发布美国洛杉矶站群服务器如何提高网站排名? 美国洛杉矶站群服务器可以通过以下几种方式帮助提高网站排名&#xff1a; - **提升网站性能**&#xff1a;美国站群服务器通常配备高速CPU…

银河麒麟V10 ARM64 离线安装 新版Docker

查询当前发行版本 nkvers下载最新版本 卸载旧依赖 卸载已经安装的老版本 yum remove docker \containerd.io \docker-runc \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-compo…

SpringBoot xxl-job 任务调度

首先官网下载xxl-job的源代码&#xff0c;然后切换到jdk8&#xff0c;等Maven下载依赖 执行mysql的脚本&#xff0c;修改连接配置&#xff0c;启动admin站点 默认地址 http://localhost:8080/xxl-job-admin/ 先新增一个任务执行器&#xff0c;指向未来任务代码的站点 然后在…

iOS 实现类似抖音翻页滚动效果

这里是效果图 参考抖音的滚动效果&#xff0c;需要我们在结束拖动的时候&#xff0c;动画设置偏移量 这里有一个注意点&#xff0c;由于我们是在拖动结束的时候&#xff0c;手动改变tableview的偏移量&#xff0c; 改变了tableView 自身原有的的滚动效果&#xff0c;所以我们…

创建Maven项目的时候让选择maven模板

创建Maven项目的时候让选择maven模板 心得 工欲利其事 必先利其器。如果你想要干成一件事 那么必须先要精通对应的工具使用。之前我不太注重工具 我觉得只要代码写的好就可以了 但是当我们了解了产品经理的一些思想之后&#xff0c;我才明白一个好的产品是可以给用户提供多大…

OceanBase 分布式数据库【信创/国产化】- OceanBase 集群配置项

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 集群配置项前言OceanBase 数据更新架构OceanBase 集群配置项OceanBase 配置项级别配置项的生效方式查看配置项的级别和生效方式OceanBase 分布式数据库【信创/国产化】- OceanBase 集群配置项…

QT学习之QFileDialog

打开一个文件夹 m_dirXML QFileDialog::getExistingDirectory(this, tr("打开XML所在文件夹"), "D:/", QFileDialog::ShowDirsOnly|QFileDialog::DontResolveSymlinks); ui.xmlDri->setText(m_dirXML);选择一个文件&#xff1a; scriptPath QFileDia…

【Python】python学生考勤数据分析可视化(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

大模型评测概述-以司南为例

OpenCompass&#xff08;司南&#xff09;是上海人工智能实验室发布的大模型评测工具。 目前已具有较为完备的生态&#xff0c;集成了大量主流的评测数据集。近期OpenCompass 作为大模型标准测试工具被Meta AI官方推荐。 一、大模型评测的意义 对于普通的使用者&#xff1a;选…

【R语言简介】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

AI手机,走入小径分岔的花园

博尔赫斯在他的成名作《小径分岔的花园》里&#xff0c;描述了一种奇妙的世界观&#xff1a;一个可能性被选择之后&#xff0c;出现了许多不同的后世&#xff0c;许多不同的时间。 在现实世界中&#xff0c;选择不会如此神奇。但站在岔路口的抉择&#xff0c;也一定会带来结果的…

pytest-stress:好用的pytest压力测试插件

简介&#xff1a;pytest-stress允许在用户定义的时间内循环测试。特别适用于一些已知测试时间&#xff0c;但不知道运行次数的场景。 历史攻略&#xff1a; 压力测试工具&#xff1a;Stress详解 Python&#xff1a;超过设定的时长则退出 安装&#xff1a; pip3 install py…