二叉排序树的删除
在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性,即:二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字
删除结点有三种情况
1.被删除的结点是叶子
2.被删除的结点只有左子树或者只有右子树
3.被删除的结点既有左子树,也有右子树
第一种:被删除的结点是叶子
由于要删除的结点p即无左子树,又无右子树,
因此删除结点p之后不会破坏二叉排序树结构的完整性,
只要将其双亲结点f原来指向p的指针改为指向空即可
第二种:被删除的结点只有左子树或者只有右子树
要删除的结点p只有左子树PL或者右子树PR,
这时候只要将p的左子树PL或p的右子树PR
直接作为其双亲结点f 的相应左子树或右子树即可
第三种:被删除的结点既有左子树,也有右子树
要删除的结点p只有左子树PL或者右子树PR,
第一种方法是:
要删除结点p若为其双亲结点f 的右子树,
则令p的左子树PL成为其双亲结点f 的右子树,
然后令p的右子树PR成为中序遍历下p的直接前驱s的右子树
例一:
先写出该树的中序遍历顺序:CL,C,QL, Q,SL,S,P,PR,F
此时p的直接前驱为S,则删除P的时候,P的右子树作为S的右子树
同时将p的左子树作为其双亲节点的左子树即可
第二种方法是:
令p的中序下的直接前驱s或直接后继结点代替p结点,
同时删除其中序下的前驱结点s(或中序下的后继结点)
如需转载,请注明文章出处,谢谢!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)