遍历二叉树和线索二叉树

目录

一、*遍历二叉树

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…

人工智能未来的发展趋势如何?

人工智能是当今科技发展的前沿领域&#xff0c;其未来的发展趋势值得关注。随着技术的不断进步和应用的深入&#xff0c;人工智能有望在多个方面取得突破性进展。具体如下&#xff1a; 迈向通用人工智能 技术发展&#xff1a;通用人工智能是指具备多领域智能能力的系统&#x…

java中的日志

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

Docker 安装运行命令解读安装Mysql

MySQL 8.0 镜像 docker pull mysql:8.0运行命令 dockerrun --namemysql-container -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306-d mysql:8.0docker run 创建并运行容器 -p 在后台运行 –name mysql 给当前容器取名叫mysql -p 3306:3306 端口映射&#xff0c;容器与主机的…

【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、勾选自己需…

Oracle day9

------------------------------------------------------------------------------------ --创建用户 create user test1 identified by 123456; create user ZJun identified by 888888; --授予权限 grant create session to test1; grant create session to ZJun; --删除用…

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

对我来说&#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…

[Django学习]查询过滤器(lookup types)

1.exact exact用于精确匹配字段的值。适用于需要精确查找某个字段值的场景。 Book.objects.filter(title__exactHarry Potter) 上面的查询会查找标题完全为“Harry Potter”的书籍。 2.iexact iexact忽略大小写地精确匹配字段的值。适用于需要忽略大小写进行精确匹配的场…

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

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

安卓浏览器区分启动、打开、分享

搞了几个钟头&#xff0c;终于全兼容了&#xff0c;分享有2种类型&#xff01; void getDataFromIntent(Intent intent) {if (intent.getAction().equals(Intent.ACTION_VIEW)) {urln intent.getDataString();if (urln ! null) {if (urln.contains("\n"))urln url…

数据分析方法之对比思维

数据分析方法论 对比分析是将两个或两个以上具有可比性的数据进行比较&#xff0c;分析其中的差异&#xff0c;以揭示事物的发展规律。 数据分析之对比思维 归纳方法——穆勒五法&#xff1a;分别是求同法、求异法、共用法、共变法、剩余法。求同法&#xff1a;比相同 2.1求…

利用 Python 和 AI 技术制作智能问答机器人

利用 Python 和 AI 技术制作智能问答机器人 引言 在人工智能的浪潮下&#xff0c;智能问答机器人成为了一种非常实用的技术。它们能够处理大量的查询&#xff0c;提供即时的反馈&#xff0c;并且可以通过机器学习技术不断优化自身的性能。本文将介绍如何使用 Python 来开发一…

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

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

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

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