先来看这个二叉排序树

下面是讨论删除的情况:

我们知道,如果要删除的叶子结点,则可以直接删除。

但如果删除的不是叶子结点呢?

我们知道这个树的中序遍历如下:

也就是说,比如要删除105,则我们可以把104,或108提上去覆盖掉,这样实现了删除,又不保证了他是二叉排序树。

下面是代码

Status DeleteBST(BiTree *T, int key)
{if( !*T ){return FALSE;}else{if( key == (*T)->data ){return Delete(T);}else if( key < (*T)->data ){return DeleteBST(&(*T)->lchild, key);}else{return DeleteBST(&(*T)->rchild, key);}}
}Status Delete(BiTree *p)
{BiTree q, s;if( (*p)->rchild == NULL ){q = *p;*p = (*p)->lchild;free(q);}else if( (*p)->lchild == NULL ){q = *p;*p = (*p)->rchild;free(q);}else{q = *p;s = (*p)->lchild;while( s->rchild ){q = s;s = s->rchild;}(*p)->data = s->data;if( q != *p ){q->rchild = s->lchild;}else{q->lchild = s->lchild;}free(s);}return TRUE;
}

二叉排序树的删除操作相关推荐

  1. c语言二叉排序树的创建与查找,C语言实现二叉查找树的插入和删除操作问题求教...

    使用C语言实现二叉查找树的插入和删除操作,但在 return searchBST( T->rchild, val, f, p);出错.这里应该使用了双指针,求教应该怎么改才正确. /* +--- ...

  2. 二叉平衡树的插入和删除操作

    [转载]二叉平衡树的插入和删除操作 1.      二叉平衡树 二叉排序树查找.插入和删除操作的时间复杂度和树的深度n有关.构建树时,当先后插入的结点按关键字有序时,二叉排序树退化为单枝树,平均查找长 ...

  3. DS二叉排序树之删除

    题目描述 给出一个数据序列,建立二叉排序树,并实现删除功能 对二叉排序树进行中序遍历,可以得到有序的数据序列 输入 第一行输入t,表示有t个数据序列 第二行输入n,表示首个序列包含n个数据 第三行输入 ...

  4. mysql 插入删除操作_MySQL——增删改操作

    插入语句 一次插入操作只插入一行数据 insert into [tablename](listname1,listname2,......) values (value1,value2,......) ...

  5. asp.net 对xml文件的读写,添加,修改,删除操作

    asp.net 对xml文件的读写,添加,修改,删除操作 下面有代码调试正确 using System; using System.Collections; using System.Componen ...

  6. 防用户误删除,耗费一周时间把DeleteMark标志都加上来了,所有的删除操作从“物理删除”转为“逻辑删除”...

    用 DeleteMark 的出发点: 1:虽然在界面上有删除提示,但是客户错误的删除了一笔数据后,想恢复被删除的数据是特别困难的,有人曾比喻,若输入数据的工作量,用1来比喻,那恢复被误删除的数据的工作 ...

  7. 给jqGrid数据行添加修改和删除操作链接

    我这里用的不是jqGrid的自带的编辑和删除操作,我已经把分页导航栏下的编辑,删除,搜索都取消掉了,就是这句$("#list1").navGrid("#pager1&qu ...

  8. ASP.NET XML读取、增加、修改和删除操作

    C#-XML读取.增加.修改和删除操作 1.xml文件格式如下: <?xml version="1.0" encoding="utf-8"?> &l ...

  9. mysql b 树删除操作,B-树的删除过程介绍

    在B-树中删除节点时,可能会发生向兄弟节点借元素,和孩子节点交换元素,甚至节点合并的过程. 我们以下面的树为基础,进行删除操作. 首先明确一下这个树的定义.它是一个5阶树.所以,每个节点内元素个数为2 ...

最新文章

  1. 华为java安全编码规范_Java安全编码之SQL注入
  2. 近看图灵碗 (8. 我就是上帝) (上)
  3. Python基本语法_函数_参数的多类型传值
  4. bzoj 1864: [Zjoi2006]三色二叉树
  5. Hibernate反向生成映射文件点击Hibernate reserve Engineering的时候没反应的解决方法
  6. 成功解决local variable 'str' referenced before assignment
  7. MySQL等关系型数据库概述
  8. 四大科技巨头跟随者众 智能家居市场容量可观
  9. 在centos和redhat上安装docker
  10. from + size must be less than or equal to: [10000] but was [10550]
  11. Texlive中jpg和pdf转成eps
  12. java中doloop语句_Java中的do-while循环——通过示例学习Java编程(11)
  13. sharepoint2019文件服务器,在多台服务器上安装 SharePoint Server 2016 或 SharePoint Server 2019...
  14. origin数据平滑_科学网-关于origin曲线平滑处理 lowess-叶小球的博文
  15. DNS(域名系统)是什么?
  16. 多线程 ForkJoinPool
  17. 从哈密尔顿路径谈NP问题
  18. wechat小程序布局flex
  19. 好用并强大的图片插件:PhotoSwipe.js
  20. iPhone13充电宝哪个牌子好?iPhone13无线充电宝推荐

热门文章

  1. 【干货】顶级 Java 源码教程项目大汇总!
  2. 程序员工资那么高,却不知道怎么花?程序员花钱指南了解一下!
  3. 非985,计算机专业的大学生该如何自学编程?
  4. 程序员浪漫起来到底有多可怕!
  5. 在谈数据治理和数字化的时候,别忘了数据标准
  6. 可视化+数据+图表,报告规范这么写才能升职
  7. 《纽约时报》:互联网新一轮品牌争夺战到来
  8. 开挂的印度裔00后:7岁“出道”教编程,12岁成为IBM荣誉顾问
  9. 为什么我不看好PWA
  10. 第三节:快速编译TypeScript,提高开发效率