首页/新闻资讯/正文详情

二叉树的遍历与线索二叉树(哈喜老师)

发布时间:2026/9/24 21:49:54 来源:云帆数科 栏目:资讯中心
二叉树的遍历与线索二叉树(哈喜老师)
1、二叉树的遍历1.1概念1.2先、中、后序遍历的递归代码#define_CRT_SECURE_NO_WARNINGS1#includestdio.h// 实现二叉链表结构的二叉树// 定义二叉树中结点的结构typedefstructBiTNode{intdata;// 数据域structBiTNode*lchild;// 指向左孩子的指针structBiTNode*rchild;// 指向右孩子的指针}BiTNode,*BiTree;// 前序遍历递归版本voidPreOrder(BiTree T)// T接收根结点的地址{if(T!NULL){// 空树不处理printf(%d ,T-data);// ① 访问根结点PreOrder(T-lchild);// ② 递归遍历左子树PreOrder(T-rchild);// ③ 递归遍历右子树}}// 中序遍历递归版本voidInOrder(BiTree T)// T接收根结点的地址{if(T!NULL){// 空树不处理InOrder(T-lchild);// ① 递归遍历左子树printf(%d ,T-data);// ② 访问根结点InOrder(T-rchild);// ③ 递归遍历右子树}}// 后序遍历递归版本voidPostOrder(BiTree T)// T接收根结点的地址{if(T!NULL){// 空树不处理PostOrder(T-lchild);// ① 递归遍历左子树PostOrder(T-rchild);// ② 递归遍历右子树printf(%d ,T-data);// ③ 访问根结点}}1.3利用队列实现二叉树的层次遍历Queue.h#pragmaonce#includestdio.h#includestdlib.h#includestdbool.hstructBiTNode;// 结构体类型的声明// 实现链式存储结构的队列(带头结点的版本)// 定义结点的结构结点用于存储队列中的元素typedefBiTNode*ElemType;// 队列中存储的数据类型是二叉树的结点的地址typedefstructLinkNode{ElemType data;structLinkNode*next;}LinkNode;// 定义队列的结构typedefstructLinkQueue{LinkNode*front;// 指向头结点的指针千万注意不是指向队头元素的指针LinkNode*rear;// 指向队尾元素的指针}LinkQueue;// 队列的初始化voidInitQueue(LinkQueueQ);// 队列是否为空。若为空返回true否则返回falseboolIsEmpty(LinkQueue Q);// 新元素x入队(即将新元素插到单链表的尾部)voidEnQueue(LinkQueueQ,ElemType x);// 队头元素出队(即删除第一个存储有效数据的结点),并将出队元素的值赋给变量xboolDeQueue(LinkQueueQ,ElemTypex);Queue.cpp#define_CRT_SECURE_NO_WARNINGS1#includeQueue.h// 队列的初始化voidInitQueue(LinkQueueQ){// 先申请一个头结点的空间// 初始化时指向头结点的指针与指向队尾元素的指针均指向头结点Q.frontQ.rear(LinkNode*)malloc(sizeof(LinkNode));Q.front-nextNULL;// 头结点中的next指针置为NULL}// 队列是否为空。若为空返回true否则返回falseboolIsEmpty(LinkQueue Q){if(Q.frontQ.rear)// 队列为空的条件既可以是Q.front Q.rear也可以是Q.front-next NULLreturntrue;elsereturnfalse;}// 新元素x入队(即将新元素插到单链表的尾部)voidEnQueue(LinkQueueQ,ElemType x){// 新元素x入队前先申请一个结点的空间用于存储新元素LinkNode*s(LinkNode*)malloc(sizeof(LinkNode));// s指向新结点s-datax;s-nextNULL;Q.rear-nexts;Q.rears;// 不要忘了让rear指针指向新的队尾元素}// 队头元素出队(即删除第一个存储有效数据的结点),并将出队元素的值赋给变量xboolDeQueue(LinkQueueQ,ElemTypex){if(Q.frontQ.rear)// 若队列为空则无法执行出队操作returnfalse;LinkNode*pQ.front-next;// p指向待出队的元素xp-data;// 将待出队元素的值赋给变量xQ.front-nextp-next;if(pQ.rear)// 注意如果队列中只有一个有效元素那么出队时需要修改队尾指针的值Q.rearQ.front;free(p);// 回收待出队元素的空间pNULL;returntrue;}BTree.h#define_CRT_SECURE_NO_WARNINGS1#includeQueue.h// 实现二叉链表结构的二叉树// 定义二叉树中结点的结构typedefstructBiTNode{intdata;// 数据域structBiTNode*lchild;// 指向左孩子的指针structBiTNode*rchild;// 指向右孩子的指针}BiTNode,*BiTree;// 利用队列实现二叉树的层序遍历voidLevelOrder(BiTree T);// T表示根结点的地址BTree.cpp重点看这个代码#define_CRT_SECURE_NO_WARNINGS1#includeBTree.h// 利用队列实现二叉树的层序遍历voidLevelOrder(BiTree T)// T表示根结点的地址{LinkQueue q;// 创建一个队列InitQueue(q);// 队列的初始化BiTree p;EnQueue(q,T);// 根结点入队while(!IsEmpty(q))// 队列不为空就进入循环{DeQueue(q,p);// 队头结点出队并将出队元素的值赋给pprintf(%d ,p-data);// 打印出队结点的值if(p-lchild!NULL)EnQueue(q,p-lchild);// 若p指向的结点的左孩子不为空则让左孩子入队if(p-rchild!NULL)EnQueue(q,p-rchild);// 若p指向的结点的右孩子不为空则让右孩子入队}}1.4由遍历序列构造二叉树1.4.1习题11.4.2习题2真题1.4.3习题3真题2、线索二叉树2.1线索二叉树的概念// 定义线索二叉树的结点结构typedefstructThreadNode{ElemType data;// 数据域存放结点的值structThreadNode*left,*right;// 左、右指针域intlTag,rTag;// lTag是左、rTag是右标志位0表示孩子指针1表示线索指针}ThreadNode,*ThreadTree;2.2构造线索二叉树2.3习题2.3.12010年题3比较容易显然选D。根据后序遍历序列为dbca以及后序线索二叉树的概念可知选D2.3.2习题二有难度

相关推荐

AI编程渗透率80%背后:Claude Code实战与递归自我改进风险
AI编程渗透率80%背后:Claude Code实战与递归自我改进风险

1. 这件事到底在说什么:从一条新闻看AI编程的真实渗透率第一次看到“代码80%是AI写的,这家AI公司呼吁暂停AI开发”这个标题,我的反应不是震惊,而是“终于有人把窗户纸捅破了”。作为一个从2021年就开始把AI编程工具塞进日常工作流… · 2026/9/24 21:49:47

GitHub涨星热榜Top3拆解:本地优先与AI嵌入的新趋势
GitHub涨星热榜Top3拆解:本地优先与AI嵌入的新趋势

接前两天的热榜我自己也在刷仓库,老实说,2026年7月11日这波涨星趋势跟年初那会儿完全不是一个味。之前火的是“能跑就行”的Agent壳子,今天冲上Top 3的这几个仓库,共性特别明显:都在解决“个人怎么用上AI”这件事&… · 2026/9/24 21:49:47

自建家庭影音中心:omp 实现云端媒体播放与硬件转码实战
自建家庭影音中心:omp 实现云端媒体播放与硬件转码实战

如果你手头攒了大量视频、音乐和照片,散落在电脑、NAS、移动硬盘甚至各个网盘里,每次想在大屏上看个片都得插硬盘、找线、切换设备,那这篇东西应该能帮你省下不少折腾的时间。我最早注意到 omp 这个项目,就是因为它的定位非常克制… · 2026/9/24 21:49:28

深度学习新闻分类推荐系统:从TextCNN到个性化推荐
深度学习新闻分类推荐系统:从TextCNN到个性化推荐

简介:这份基于深度学习的新闻分类推荐系统Python实现源码,是专为课程设计与期末大作业准备的高分项目,下载后无需修改即可运行,适用于需要快速交付完整课题的高校学生。系统涵盖新闻数据预处理、文本分类模型训练、推荐逻辑展示等… · 2026/9/24 23:59:53

汽车电子底层软件开发:AUTOSAR与CAN总线实战解析
汽车电子底层软件开发:AUTOSAR与CAN总线实战解析

1. 这门“汽车电子底层软件开发就业课”到底在教什么?——不是写个LED闪烁就能上岗的很多人看到“汽车电子底层软件开发就业课”这个标题,第一反应是:不就是嵌入式C语言单片机CAN通信?刷几道LeetCode、调通一个STM32 CAN收发例程&… · 2026/9/24 23:59:53

Vim基础操作全攻略:保存退出、模式切换与高频命令实战
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保… · 2026/9/24 23:59:53

Python+CNN车牌识别实战:从数据预处理到模型训练与部署
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据… · 2026/9/24 23:59:53

AI元人文:从工具使用到思维重构的深度探索
AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决… · 2026/9/24 23:59:53

《AI Agent 场景应用 - MobileOpenClaw》第5-9节:会话上下文细化处理实战指南
《AI Agent 场景应用 - MobileOpenClaw》第5-9节:会话上下文细化处理实战指南

文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、… · 2026/9/24 23:59:47

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码