遍历二叉树和线索二叉树

目录

一、*遍历二叉树

1.1遍历定义

1.2遍历目的

1.3遍历用途

1.4遍历方法

1.4.1先序遍历(DLR)

1.4.2中序遍历(LDR)

1.4.3后序遍历(LRD)

1.5根据遍历序列确定二叉树

1.6遍历算法的实现

1.6.1先序遍历算法的实现

1.6.2中序遍历算法的实现

1.6.3后序遍历算法的实现

1.6.4中序遍历的非递归算法

1.6.5二叉树的层次遍历

1.7二叉树遍历算法的应用

1.7.1按先序遍历建立二叉树的二叉链表

1.7.2复制二叉树

 1.7.3计算二叉树深度

1.7.4计算二叉树结点总数

1.7.5计算二叉树叶子数

二、线索二叉树

2.1线索

2.2线索二叉树的存储结构


一、*遍历二叉树

1.1遍历定义

顺着某一条搜索路径巡防二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次(周游)

1.2遍历目的

得到树中所有结点的一个线性排列

1.3遍历用途

是树结构插入、删除、修改、查找和排序运算的前提

1.4遍历方法

依次遍历二叉树中的根结点、左子树和右子树,共有6种方案:

DLR、DRL、LDRLRD、RDL、RLD

若规定先左后右,则DLR(先序遍历)、LDR(中序遍历)、LRD(后序遍历)

1.4.1先序遍历(DLR)

 

1.4.2中序遍历(LDR)

1.4.3后序遍历(LRD)

 

练习 ①

 练习②

1.5根据遍历序列确定二叉树

由二叉树的先序序列和中序序列、后序序列和中序序列可以确定唯一一棵二叉树

①先序和中序例:

 ②后序和中序例:

1.6遍历算法的实现

1.6.1先序遍历算法的实现
Status PreOrderTraverse(BiTree T){if(T==NULL) return OK;  //空二叉树else{visit(T);            //访问根结点PreOrderTraverse(T->lchild);  //递归遍历左子树PreOrderTraverse(T->rchild);  //递归遍历右子树}
}
1.6.2中序遍历算法的实现
Status InOrderTraverse(BiTree T){if(T==NULL) return OK;  //空二叉树else{InOrderTraverse(T->lchild); //递归遍历左子树visit(T);            //访问根结点InOrderTraverse(T->rchild); //递归遍历右子树}
}
1.6.3后序遍历算法的实现
Status PostOrderTraverse(BiTree T){if(T==NULL) return OK; //空二叉树else{PostOrserTraverse(T->lchild); //递归遍历左子树PostOrderTraversr(T->rchild); //递归遍历右子树visit(T); //访问根结点}
}

时间和空间复杂度均为O(n)

1.6.4中序遍历的非递归算法

(用栈来实现:后进先出)

基本思想:①建立一个栈;②根结点进栈,遍历左子树;③根结点出栈,输出根结点,遍历右子树

Status InOrderTraverse(BiTree T){BiTree p; InitStack(S); p=T;while(p ||!StackEmpty(S)){if(p) { Push(S,p); p=p->lchild;}else  { Pop(S,q);  printf("%c",q->data);p=q->rchild;}};//whilereturn OK;
}
1.6.5二叉树的层次遍历

对于一棵二叉树,从根结点开始,按从上到下、从左到右的顺序访问每一个结点,每一个结点仅访问一次。

(用队列来实现)

基本思想:①将根结点进队;②队不空时循环:从队列中出列一个结点*p,访问它:若它有左孩子结点,将左孩子结点进队;若它有右孩子结点,将右孩子结点进队。

void LevelOrder(BTNode *b){BTNode *p;  SqQueue *qu;InitQueue(qu);   //初始化队列enQueue(qu,b);   //根结点指针进入队列while(!QueueEmpty(qu)) { //队不为空,循环deQueue(qu,p);         //出队结点pprintf("%c",p->data);  //访问结点pif(p->lchild!=NULL) enQueue(qu,p->lchild);  //有左孩子时将其进队if(p->rchild!=NULL) enQueue(qu,p->rchild);  //有右孩子时将其进队}
}

1.7二叉树遍历算法的应用

1.7.1按先序遍历建立二叉树的二叉链表

 

1.7.2复制二叉树

 

 1.7.3计算二叉树深度

 

1.7.4计算二叉树结点总数

1.7.5计算二叉树叶子数

二、线索二叉树

2.1线索

改变指向的指针:若某个结点的左孩子为空,则将空的左孩子指针域改为指向其前驱;若某结点的右孩子为空,则将空的右孩子指针域改为指向其后继

2.2线索二叉树的存储结构

 Ltag=0 ——>lchild域指示结点的左孩子

 Ltag=1 ——>lchild域指示结点的前驱

 Rtag=0 ——>rchild域指示结点的右孩子

 Rtag=1 ——>rchild域指示结点的后继

 

 

增设头结点

 

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

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

相关文章

PDF转成清晰长图

打开一个宝藏网址在线PDF转换器/处理工具 - 在线工具系列 点击图下所示位置 按照图下所示先上传文件,设置转换参数后点击转换,等待 等待转换完成后,可以在转换结果处选择下载地址,点击即可进行下载使用了。对比了其他几个网站的转…

Django 循环模板标签

1&#xff0c;循环模板标签 Django 模板系统中提供了多种循环模板标签来迭代数据并显示列表、字典或其他可迭代对象。 1.2 {% for %} 标签 用于迭代列表或可迭代对象&#xff0c;并为每个元素提供上下文变量。 {% for item in items %}{{ item }} <!-- 渲染当前迭代项 -…

SpringBoot 搭建sftp服务 实现远程上传和下载文件

maven依赖&#xff1a; <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>application.yml sftp:protocol: sftphost: port: 22username: rootpassword: sp…

java中的日志

springboot自带slf4j框架和logback&#xff0c;我们可以移除spring的logging&#xff0c;然后再带入自己的日志框架。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusio…

【MMSegmentation 环境配置】

MMSegmentation 环境配置 1. 创建python 环境2. 安装pytorch3. 安装MMCV4. 安装 MMSegmentation.5. 测试是否安装成功 1. 创建python 环境 conda create --name openmmlab python3.8 -y conda activate openmmlab2. 安装pytorch On GPU platforms: conda install pytorch tor…

如何混淆 net core 8 架构 C# 编译程序

如何混淆 net core 8 架构 C# 编译程序 一、使用混淆工具 .NET Reactor V6.9二、net core 8 架构 C# 编译程序&#xff08;发布的单文件&#xff09;1、通过发布的单文件程序&#xff0c;可以直接在 .NET Reactor 拖入或打开 &#xff0c;勾选自己需要的保护功能。2、勾选自己需…

迈向百亿亿次人工智能数据基础设施

对我来说&#xff0c;在MinIO已经一个多星期了。沉浸在白板会议、架构审查和客户电话中的最大收获是&#xff0c;产品的简单性既是其显着特征&#xff0c;也是其最具决定性的价值驱动因素之一。在规模上尤其如此。由于人工智能的进步&#xff0c;计算能力的爆炸性增长对数据格局…

ArkUI 开发学习随记——登陆界面,正圆头像,主页顶部,列表项案例源码

目录 案例一&#xff1a;登录界面 案例二&#xff1a;正圆头像&#xff0c;胶囊按钮 案例三&#xff1a;主页顶部 案例四&#xff1a;列表项 案例一&#xff1a;登录界面 代码&#xff1a; build() {Column({space:10}){Image($r("app.media.naxida")).width(100)…

什么是N卡和A卡?有什么区别?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是N卡和A卡&#xff1f;有什么区别&#xff1f;…

福州大学 2022~2023 学年第 1 学期考试 A 卷压轴题参考答案

题目&#xff1a; 定义一个抽象类Structure&#xff08;含有纯虚函数type函数&#xff0c;用以显示当前结构的类型&#xff1b; 含有show函数&#xff09;&#xff0c; 在此基础上派生出Building类, 用来存储一座楼房的层数、房间数以及它的总平方米数。 建立派生 类House&am…

已解决java.security.acl.AclNotFoundException异常的正确解决方法,亲测有效!!!

已解决java.security.acl.AclNotFoundException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查ACL文件路径和名称 确认系统权限 修改代码逻辑 确保ACL文…

现在这个行情,又又又要开始准备面试了~~

亲爱的程序员朋友们: 这些资料曾经帮助过许多有志之士顺利拿下抖音、快手、阿里等大厂的Offer&#xff0c;现在也希望它们能为你的面试旅程助力&#xff01; 关注【程序员世杰】回复【1024】惊喜等你来拿&#xff01; 截图 关注【程序员世杰】回复【1024】惊喜等你来拿&#xf…

python入门基础知识(错误和异常)

本文部分内容来自菜鸟教程Python 基础教程 | 菜鸟教程 (runoob.com) 本人负责概括总结代码实现。 以此达到快速复习目的 目录 语法错误 异常 异常处理 try/except try/except...else try-finally 语句 抛出异常 用户自定义异常 内置异常类型 常见的标准异常类型 语法…

数据结构---二叉树前中后序遍历

1. 某完全二叉树按层次输出&#xff08;同一层从左到右&#xff09;的序列为 ABCDEFGH 。该完全二叉树的前序序列为() A: ABDHECFG B: ABCDEFGH C: HDBEAFCG D: HDEBFGCA 2. 二叉树的先序遍历和中序遍历如下&#xff1a;先序遍历: EFHIGJK; 中序遍历: HFIEJKG. 则二叉…

Unit redis-server.service could not be found.

我的报错如下Unit redis-server.service could not be found. 关键是刷新后台服务 sudo systemctl daemon-reload启动redis-server sudo systemctl start redis-server查看redis-Server服务状态 sudo systemctl status redis-server

MySQL数据库中的索引知识

MySQL数据库中索引的作用是用来加快数据的查询速度。 索引 index&#xff08;表的层面&#xff09; 在数据库中使用select来查询数据的时候会一条一条得去查询符合要求的数据&#xff0c;而索引就相当于在这张表中依据某一个字段的数值给这张表的数据创建了一个目录。目录帮…

江协科技51单片机学习- p11 静态数码管显示

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

35.简易远程数据框架的实现

上一个内容&#xff1a;34.构建核心注入代码 34.构建核心注入代码它的调用LoadLibrary函数的代码写到游戏进程中之后无法调用&#xff0c;动态链接库的路径是一个内存地址&#xff0c;写到游戏进程中只把内存地址写过去了&#xff0c;内存地址里的内容没写过去&#xff0c;导致…

Netty ByteBuf 使用详解

文章目录 1.概述2. ByteBuf 分类3. 代码实例3.1 常用方法3.1.1 创建ByteBuf3.1.2 写入字节3.1.3 扩容3.1.2.1 扩容实例3.1.2.2 扩容计算新容量代码 3.1.4 读取字节3.1.5 标记回退3.1.6 slice3.1.7 duplicate3.1.8 CompositeByteBuf3.1.9 retain & release3.1.9.1 retain &a…

Jmeter5.X性能测试【完整版】

目录 一、Http基础协议和解析 1、浏览器的B/S架构和C/S架构 &#xff08;1&#xff09;CS架构 &#xff08;2&#xff09;BS架构 &#xff08;3&#xff09;URL理解 2、Http超文本传输协议 &#xff08;1&#xff09;含义 # 协议 # json协议 # xml协议 &#xff08;…