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

数据结构 - 树的遍历

一、二叉树的遍历

对于二叉树,常用的遍历方式包括:先序遍历、中序遍历、后序遍历和层次遍历 

1、先序遍历(PreOrder)

先序遍历的操作过程如下:

若二叉树为空,则什么也不做;否则,

(1)访问根结点;

(2)先序遍历左子树;

(3)先序遍历右子树。

void PreOrder(BiTree T){   //先序遍历if(T!=NULL){visit(T);              //访问根结点PreOrder(T->lchild);   //递归遍历左子树PreOrder(T->rchild);   //递归遍历右子树}
}

2、中序遍历(InOrder)

中序遍历(InOrder)的操作过程如下:

若二叉树为空,则什么也不做;否则,

(1)中序遍历左子树;

(2)访问根结点;

(3)中序遍历右子树。

void InOrder(BiTree T){    //中序遍历if(T!=NULL){InOrder(T->lchild);   //递归遍历左子树visit(T);               //访问根结点InOrder(T->rchild);   //递归遍历右子树}
}

3、后序遍历(PostOrder)

后序遍历(PostOrder)的操作过程如下:

若二叉树为空,则什么也不做;否则,

(1)后序遍历左子树;

(2)后序遍历右子树;

(3)访问根结点。

 

void PostOrder(BiTree T){    //后序遍历伪代码if(T!=NULL){PostOrder(T->lchild);   //递归遍历PostOrder(T->rchild);   //递归遍历右子树visit(T);              //访问根结点}
}

4、层次遍历(LevelOrder)

层次遍历(LevelOrder)的操作过程如下:

(1)首先借助一个队列,先将二叉树根结点入队,然后出队,访问出队结点;

(2) 若它有左子树,则将左子树根结点入队;

(3) 若它有右子树,则将右子树根结点入队;

(4) 然后出队,访问出队结点。如此反复,直到队列为空[1,5]。

void LevelOrder(BiTree T){    //层次遍历InitQueue(Q);               //初始化辅助队列BiTree P;EnQueue(Q,T);              //将根结点入队while(!IsEmpty(Q)){       //队列不空则循环DeQueue(Q,P);            //队头结点出队visit(p);                 //访问出队结点if(p->lchild!=NULL)EnQueue(Q,p->lchild); //左子树不空,则左子树根结点入队if(p->rchild!=NULL)EnQueue(Q,p->rchild); //右子树不空,则右子树根结点入队}
}

5、遍历示例

存在如下图所示二叉树:

二叉树示例

先序遍历为ABDECF(根-左-右)

中序遍历为DBEAFC(左-根-右)(仅二叉树有中序遍历)

后序遍历为DEBFCA(左-右-根)

层次遍历为ABCDEF

二、一般树的遍历

树的遍历是指用某种方式访问树中的每个结点,且仅访问一次。主要有三种方式:

1.先根遍历:若树非空,先访问树的根结点,然后依次先根遍历根结点的每棵子树。其遍历序列与其转换为二叉树的先序序列相同。

2.后根遍历:若树非空,先依次后根遍历根结点的每棵子树,然后访问树的根结点。其遍历序列与其转换为二叉树的后序序列相同。

3.层次遍历:与二叉树的层次遍历思想基本相同,即按层序依次访问各结点。

例如:如下图所示:

先根遍历为ABEFGCDHI

后根遍历为EFGBCHIDA

层次遍历为ABCDEFGHI

相关文章:

数据结构 - 树的遍历

一、二叉树的遍历 对于二叉树,常用的遍历方式包括:先序遍历、中序遍历、后序遍历和层次遍历 。 1、先序遍历(PreOrder) 先序遍历的操作过程如下: 若二叉树为空,则什么也不做;否则&#xff0…...

时序模型介绍

一.整体介绍 1.单变量 vs 多变量时序数据 单变量就是只根据时间预测,多变量还要考虑用户 2.为什么不能用机器学习预测: a.时间不是影响标签的关键因素 b.时间与标签之间的联系过于弱/过于复杂,因此时序模型依赖于时间与时间的相关性来进行预…...

Java面试实战:从Spring到大数据的全栈挑战

Java面试实战:从Spring到大数据的全栈挑战 在某家知名互联网大厂,严肃的面试官正在面试一位名叫谢飞机的程序员。谢飞机以其搞笑的回答和对Java技术栈的独特见解而闻名。 第一轮:Spring与微服务的探索 面试官:“请你谈谈Spring…...

解决idea与springboot版本问题

遇到以下问题: 1、springboot3.2.0与jdk1.8 提示这个包org.springframework.web.bind.annotation不存在,但是pom已经引入了spring-boot-starter-web 2、Error:Cannot determine path to tools.jar library for 17 (D:/jdk17) 3、Error:(3, 28) java: …...

【第4章 图像与视频】4.4 离屏 canvas

文章目录 前言为什么要使用 offscreenCanvas为什么要使用 OffscreenCanvas如何使用 OffscreenCanvas第一种使用方式第二种使用方式 计算时长超过多长时间适合用Web Worker 前言 在 Canvas 开发中,我们经常需要处理复杂的图形和动画,这些操作可能会影响页…...

[AXI]如何验证AXI5原子操作

如何验证 AXI5 原子操作 摘要:在 UVM (Universal Verification Methodology) 验证环境中,验证 AXI5 协议的原子操作 (Atomic Operations) 是一项重要的任务,特别是在验证支持高并发和数据一致性的 SoC (System on Chip) 设计时。AXI5 引入了原…...

尚硅谷redis7 74-85 redis集群分片之集群是什么

74 redis集群分片之集群是什么 如果主机宕机,那么写操作就被暂时中断,后面就要由哨兵进行投票和选举。那么一瞬间若有大量的数据修改,由于写操作中断就会导致数据流失。 由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行…...

Android获取设备信息

使用java: List<TableMessage> dataListnew ArrayList<TableMessage>();//获取设备信息Hashtable<String,String> ht MyDeviceInfo.getDeviceAllInfo2(LoginActivity.this);for (Map.Entry<String, String> entry : ht.entrySet()) {String key entry…...

WPF的基础控件:布局控件(StackPanel DockPanel)

布局控件&#xff08;StackPanel & DockPanel&#xff09; 1 StackPanel的Orientation属性2 DockPanel的LastChildFill3 嵌套布局示例4 性能优化建议5 常见问题排查 在WPF开发中&#xff0c;布局控件是构建用户界面的基石。StackPanel和DockPanel作为两种最基础的布局容器&…...

apache的commons-pool2原理与使用详解

Apache Commons Pool2 是一个高效的对象池化框架&#xff0c;通过复用昂贵资源&#xff08;如数据库连接、线程、网络连接&#xff09;优化系统性能。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击…...

打印Yolo预训练模型的所有类别及对应的id

有时候我们可能只需要用yolo模型检测个别类别&#xff0c;并显示&#xff0c;这就需要知道id&#xff0c;以下代码可打印出 from ultralytics import YOLO# 加载模型 model YOLO(yolo11x.pt)# 打印所有类别名称及其对应的ID print(model.names) {0: person, 1: bicycle, 2: c…...

语法糖介绍(C++ Python)

语法糖&#xff08;Syntactic Sugar&#xff09;是编程语言中为了提升代码可读性和简洁性而设计的语法结构。它不改变语言的功能&#xff0c;但能让代码更易写和理解。以下是 C 和 Python 中常见的语法糖示例&#xff1a; C 中的常见语法糖 范围 for 循环&#xff08;Range-bas…...

事务详解及面试常考知识点整理

事务详解及面试常考知识点整理 1. 什么是事务&#xff1f; **事务&#xff08;Transaction&#xff09;**是将多条 SQL 语句打包执行的操作单元&#xff0c;具有“一气呵成”的特性。就好比你要完成“把大象放进冰箱”这件事&#xff0c;一共分三步&#xff1a; 打开冰箱门把…...

设计模式26——解释器模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 解释器模式&#xff08;Interp…...

在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.3,运行demo,显示label

在MDK中自动部署LVGL&#xff0c;在stm32f407ZGT6移植LVGL-8.3 一、硬件平台二、实现功能三、移植步骤1、下载LVGL-8.42、MDK中安装LVGL-8.43、配置RTE4、配置头文件 lv_conf_cmsis.h5、配置lv_port_disp_template 四、添加心跳相关文件1、在STM32CubeMX中配置TIM7的参数2、使能…...

ArcGIS 与 HEC-RAS 协同:流域水文分析与洪水模拟全流程

技术点目录 洪水淹没危险性评价方法及技术介绍基于ArcGIS的水文分析基于HecRAS淹没模拟的洪水危险性评价洪水风险评价综合案例分析应用了解更多 —————————————————————————————————————————————————— 前言综述 洪水危险性及…...

树莓派设置静态ip 永久有效 我的需要设置三个 一个摄像头的 两个设备的

通过 systemd-networkd 配置 此方法适用于较新的Raspberry Pi OS版本&#xff0c;支持同时绑定多个IP地址到同一网卡&#xff0c;且配置清晰稳定。 1.禁用DHCP客户端对eth0的管理:编辑/etc/dhcpcd.conf文件&#xff0c;添加以下内容以忽略eth0接口的自动分配 sudo nano /etc…...

多模态大语言模型arxiv论文略读(九十九)

PartGLEE: A Foundation Model for Recognizing and Parsing Any Objects ➡️ 论文标题&#xff1a;PartGLEE: A Foundation Model for Recognizing and Parsing Any Objects ➡️ 论文作者&#xff1a;Junyi Li, Junfeng Wu, Weizhi Zhao, Song Bai, Xiang Bai ➡️ 研究机构…...

Fine-tuning:微调技术,训练方式,LLaMA-Factory,ms-swift

1&#xff0c;微调技术 特征Full-tuningFreeze-tuningLoRAQLoRA训练参数量全部少量极少极少显存需求高低很低最低模型性能最佳中等较好接近 LoRA模型修改方式无变化局部冻结插入模块量化插入模块多任务共享不便较便非常适合非常适合适合超大模型微调❌✅✅✅&#xff08;最优&…...

vscode连接的linux服务器,上传项目至github

问题 已将项目整个文件夹拷贝到克隆下来的文件夹中&#xff0c;并添加了所有文件&#xff0c;并修改了commit -m&#xff0c;使用git push -u origin main提交的时候会出现vscode请求登录github&#xff0c;确定之后需要等待很久&#xff0c;也无果 原因 由于 远程服务器无法…...

XCTF-web-mfw

发现了git 使用GitHack下载一下源文件&#xff0c;找到了php源代码 <?phpif (isset($_GET[page])) {$page $_GET[page]; } else {$page "home"; }$file "templates/" . $page . ".php";// I heard .. is dangerous! assert("strpos…...

indel_snp_ssr_primer

indel标记使用 1.得到vcf文件 2.提取指定区域vcf文件并压缩构建索引 bcftools view -r <CHROM>:<START>-<END> input.vcf -o output.vcf bgzip -c all.filtered.indel.vcf > all.filtered.indel.vcf.gz tabix -p vcf all.filtered.indel.vcf.gz3.准备参…...

图论核心:深度搜索DFS 与广度搜索BFS

一、深度优先搜索&#xff08;DFS&#xff09;&#xff1a;一条路走到黑的探索哲学 1. 算法核心思想 DFS&#xff08;Depth-First Search&#xff09;遵循 “深度优先” 原则&#xff0c;从起始节点出发&#xff0c;尽可能深入地访问每个分支&#xff0c;直到无法继续时回溯&a…...

Java 调用 HTTP 和 HTTPS 的方式详解

文章目录 1. HTTP 和 HTTPS 基础知识1.1 什么是 HTTP/HTTPS&#xff1f;1.2 HTTP 请求与响应结构1.3 常见的 HTTP 方法1.4 常见的 HTTP 状态码 2. Java 原生 HTTP 客户端2.1 使用 URLConnection 和 HttpURLConnection2.1.1 基本 GET 请求2.1.2 基本 POST 请求2.1.3 处理 HTTPS …...

Redis--基础知识点--28--慢查询相关

1 慢查询的原因 1.1 非命令数据相关原因 1.1.1 网络延迟 原因&#xff1a;客户端与 Redis 服务器之间的网络延迟可能导致客户端感知到的响应时间变长。 解决方案&#xff1a;优化网络环境 排查&#xff1a; 1.1.2 CPU 竞争 原因&#xff1a;Redis 是单线程的&#xff0c…...

目标检测:YOLO 模型详解

目录 一、YOLO&#xff08;You Only Look Once&#xff09;模型讲解 YOLOv1 YOLOv2 (YOLO9000) YOLOv3 YOLOv4 YOLOv5 YOLOv6 YOLOv7 YOLOv8 YOLOv9 YOLOv10 YOLOv11 YOLOv12 其他变体&#xff1a;PP-YOLO 二、YOLO 模型的 Backbone&#xff1a;Focus 结构 三、…...

HDFS存储原理与MapReduce计算模型

HDFS存储原理 1. 架构设计 主从架构&#xff1a;包含一个NameNode&#xff08;主节点&#xff09;和多个DataNode&#xff08;从节点&#xff09;。 NameNode&#xff1a;管理元数据&#xff08;文件目录结构、文件块映射、块位置信息&#xff09;&#xff0c;不存储实际数据…...

电机控制选 STM32 还是 DSP?技术选型背后的现实博弈

现在搞电机控制&#xff0c;圈里人都门儿清 —— 主流方案早就被 STM32 这些 Cortex-M 单片机给拿捏了。可要是撞上系统里的老甲方&#xff0c;技术认知还停留在诺基亚砸核桃的年代&#xff0c;非揪着 DSP 不放&#xff0c;咱也只能赔笑脸&#xff1a;“您老说的对&#xff0c;…...

.NET 开源工业视觉系统 OpenIVS 快速搭建自动化检测平台

前言 随着工业4.0和智能制造的发展&#xff0c;工业视觉在质检、定位、识别等场景中发挥着越来越重要的作用。然而&#xff0c;开发一个完整的工业视觉系统往往需要集成相机控制、图像采集、图像处理、AI推理、PLC通信等多个模块&#xff0c;这对开发人员提出了较高的技术要求…...

从0到1掌握Kotlin高阶函数:开启Android开发新境界!

简介 在当今的Android开发领域,Kotlin已成为开发者们的首选编程语言。其高阶函数特性更是为代码的编写带来了极大的灵活性和简洁性。本文将深入探讨Kotlin中的高阶函数,从基础概念到实际应用,结合详细的代码示例和mermaid图表,为你呈现一个全面且深入的学习指南。无论你是…...