数据结构 第六章 树与二叉树(三)

🚀 【考纲要求】二叉树的遍历

🚀 第六章第一节内容请查看此链接 树的基本概念

🚀 第六章第二节内容请查看此链接 二叉树的定义、四种特殊的二叉树和二叉树的存储结构

三、二叉树的遍历和线索二叉树

3.1二叉树的遍历

所谓的二叉树的遍历就是将按着某种顺序依次的遍历二叉树中的节点

①先序遍历

先序遍历就是按着根节点------左孩子节点------右孩子节点的顺序依次往下遍历

②中序遍历

是按着左孩子------根节点------右孩子的顺序遍历的

③后续遍历

按着左孩子------右孩子------根节点的顺序遍历



应该熟练的掌握这三种遍历的顺序,能够准确得出每种方法的遍历顺序。在遍历中我们还可以利用这些算法来求前缀、中缀和后缀表达式,使用先序遍历可以得到前缀表达式,使用中序遍历可以得到中缀表达式,使用后序遍历可以得到后缀表达式。

如何使用代码来表示这三种遍历顺序呢?其实就是使用了递归来实现遍历的,遍历之前要判断此时的根节点是否为空,即是否为空树,若不为空树就继续依次按着三种不同的访问顺序编写代码即可。

c 复制代码
//先序遍历
void PreOrder(BiTree T){
	if(T!==NULL){
		visit(T);        //访问根节点
		PreOrder(T->Lchild);  //访问左孩子
		PreOrder(T->Rchild);  //访问右孩子
	}
}
c 复制代码
//中序遍历
void PreOrder(BiTree T){
	if(T!==NULL){
		PreOrder(T->Lchild);  //访问左孩子
		visit(T);        //访问根节点
		PreOrder(T->Rchild);  //访问右孩子
	}
}
c 复制代码
//后序遍历
void PreOrder(BiTree T){
	if(T!==NULL){
		PreOrder(T->Lchild);  //访问左孩子
		PreOrder(T->Rchild);  //访问右孩子
		visit(T);        //访问根节点
	}
}

④层序遍历

就是按着树的结构一层一层的遍历,对于这种方式的遍历我们是使用了一个队列进行辅助遍历的。

具体来看下它是怎么进行遍历的,首先判断是否为空树,树不为空,则将树的根节点首先入队;然后判断队列是否为空,若不为空则出队一个元素,与此同时判断出队元素的是否存在左孩子和右孩子,按着先入队左孩子再入队右孩子的顺序入队;入队操作结束后依次循环判队列空,出队一个元素,入队出对元素的左右孩子,值至队列空,遍历即可以完成。

⑤递归算法和非递归算法的转换

⑥由遍历序列构造二叉树

3.2线索二叉树

相关推荐
四谎真好看6 分钟前
Java 黑马程序员学习笔记(进阶篇28)
java·笔记·学习·学习笔记
_OP_CHEN12 分钟前
算法基础篇:(十一)贪心算法拓展之区间问题:从重叠到覆盖的最优解艺术
算法·贪心算法
晨晖213 分钟前
springboot的Thymeleaf语法
java·spring boot·后端
p***950019 分钟前
【SpringBoot】日志文件
java·spring boot·spring
b***666139 分钟前
【springboot】健康检查 监控
java·spring boot·后端
明洞日记1 小时前
【设计模式手册010】组合模式 - 树形结构的优雅处理
java·设计模式·组合模式
钟智强1 小时前
线性映射(Linear Mapping)原理详解:机器学习中的数学基石
人工智能·算法·机器学习
q***47181 小时前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于SpringBoot的医院血库管理系统设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
菠菠萝宝2 小时前
【Java手搓RAGFlow】-9- RAG对话实现
java·开发语言·人工智能·llm·jenkins·openai