binarytree
1. 二叉树简介
2. 二叉树实现代码及boost类库中对于图的支持简单介绍
3. 代码反思
4. 代码下载
1. 二叉树简介
二叉树顾名思义,除了叶子节点之外,每个节点均含有两个子节点。例如:
二叉查找树是满足下面的下面条件的 二叉树:
下面定义在二叉查找树上的操作:
1. 二叉查找树上最大元素:maxElement
2. 最小元素:minElement
3. 前序遍历:preOrder
4. 中序遍历: inOrder
5. 后序遍历:postOrder
6. 中序遍历的前驱:precursor
7. 中序遍历后继:successor
8. 插入节点:insertNode
9. 删除节点:deleteNode
2. 二叉树实现算法
代码量比较大,这里略去代码,仅仅是描述算法的思想。下面有完整的代码下载。
2.1. 析构函数主要负责将释放内存,主要的算法是树的后序(注意只能使用后序遍历算法)遍历算法。
2.2 遍历算法主要是通过递归实现,递归的结束条件也是比较简单。
2.3 中序遍历的后继,对于下面的二叉树来说的话,分为下面的集中情况:1. 如果存在右节点的话,那么后继就是右节点的的最左孩子,如图中的1节点. 2. 没有右孩子,并且是作为左孩子出现的话,那么该节点的父节点就是后继结点,如下图中的4节点。3. 如果该节点没有右孩子,同时作为右孩子出现的话,需要向上回溯,直到找到第一个作为左孩子的父节点,如图中的9节点。
2.4 中序遍历的前驱:1. 有左孩子的话,直接返回左孩子;2.没有左孩子,并且该节点是作为右孩子的话,返回父节点;3.没有左孩子,并且是作为左孩子的话,寻找第一个作为右孩子的父节点。
2.5 插入节点:首先通过循环查找到新插入节点的位置(父节点),然后将数据插入即可,但是这里需要判定当前树是否为空。
2.6 删除节点分为下面的集中情况(常见代码):
3. 代码反思
3.1 由于树在定义时就是使用递归定义的,所以树的很多问题都能通过递归实现,例如在析构函数释放内存,代码如下:
// 析构函数
3.2 在树的算法的实现中,存在很多情况下使用双游标的情况。例如在insertNode中为了找到新加入的节点的父节点,通过如下的代码实现:
MyBinaryTreeNode* parent = NULL;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?