BST删除操作
来源:互联网 发布:司法考试鲁迅姓周 知乎 编辑:程序博客网 时间:2024/05/21 11:29
struct stu{ int val; stu* lc; //左孩子 stu* rc; //右孩子};stud* deleteMin(stud* subroot,stud*& min){ if(subroot->lc == NULL) { min = subroot; //左孩子为空,则根节点就是最小节点 return subroot->rc; //根节点最小,要删掉,所以返回右孩子 } //左孩子不为空,根节点不是最小的,递归调用deleteMin,删除右子树的最小节点 subroot->rc = deleteMin(subroot,min); return subroot;}stru* delete(stud *subroot,int val){ if(subroot==NULL) //树为空 return NULL; if(subroot->val > val) //val在左子树中 //递归调用delete,在左子树中查找并删除val,同时更新左子树状态 subroot->lc = delete(subroot->lc,val); else if(subroot->val < val) //val在右子树中 //递归调用delete,在右子树中查找并删除val,同时更新右子树状态 subroot->rc = delete(subroot->rc,val); else{ //找到节点 //左节点为空,直接返回根的右节点,注意右节点也可能为空,但是没关系 if(subroot->lc == NULL) subroot = subroot->rc; //右节点为空,则返回根的左节点,注意右节点也可能为空,但是没关系 else if(subroot->rc == NULL) subroot = subroot->lc; else{ //左右孩子节点都不为空 stud* temp; subroot->rc = deleteMin(subroot->rc,temp); //获取并删除右子树最小节点,更新右子树 subroot->val = temp->val; //用最小节点temp的值val替换根节点的内容 } } return subroot;}
比较基础的内容,主要是要注意函数的递归调用,一开始在子树更新这块我没绕过来,所以不能理解。
0 0
- BST删除操作
- BST的插入、删除、查找操作
- 算法4-10:BST平衡二叉树的删除操作
- BST树的删除
- BST的删除
- BST的操作
- Bst的基本操作
- BST的基本操作
- BST的基本操作
- 排序二叉树BST的基本操作(2)前驱,后继,删除
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- 二叉搜索树(BST)的常用操作:建树、插入、查询、删除、排序打印
- BST的查找、插入、删除
- BST的插入和删除
- 手写BST插入查找删除
- BST 插入删除查找遍历
- pku 2309 BST 位操作
- 排序二叉树BST的基本操作(2)前驱,后继,删除 http://blog.csdn.net/feliciafay/article/details/12174307
- 33333333333333333
- Android Tricks
- JSP、Servlet、EL表达式简单实现网站统计
- 光传感器和距离传感器TMD22713源代码执行过程分析
- flex android开发中关于请求报文技术操作问题
- BST删除操作
- tips
- 构架师之路
- php中global和$GLOBALS[]的分析
- Android刷机教程——ZIP包
- 解析各大电子商务网站订单号的生成方式
- 深入浅出单实例Singleton设计模式
- C++ 通过引用来传递和返回对象
- HDU1241 油田合并(DFS)