二叉查找树BST的删除操作(哈工大版)

C++代码

/***** 二叉查找树BST *****/
#include<iostream>
using namespace std;struct BST {   //BST = Binary Search Treeint data;BST* lchild, * rchild;
};/***函数声明***/
void Insert(int data, BST*& tree);
BST* Create();
BST* Search(int key, BST* tree);
void Delete(int key, BST*& tree);
int Deletemin(BST*& tree);
void Inorder(BST* tree);void Insert(int data, BST*& tree) {   //巧用引用if (tree == NULL) {tree = new BST;tree->data = data;tree->lchild = NULL;tree->rchild = NULL;}else if (data < tree->data)  Insert(data, tree->lchild);else if (data > tree->data)  Insert(data, tree->rchild);
}
BST* Create() {BST* tree = NULL;int data;cin >> data;while (data) {   //假设输入0结束Insert(data, tree);cin >> data;}return tree;
}
BST* Search(int key, BST* tree) {BST* p = tree;if (p == NULL || p->data == key)  return p;else if (key < p->data)  return Search(key, p->lchild);else  return Search(key, p->rchild);
}
void Delete(int key, BST*& tree) {   //删除二叉树的某个节点值if (tree != NULL) {if (key < tree->data)Delete(key, tree->lchild);else if (key > tree->data)Delete(key, tree->rchild);else if (tree->lchild == NULL)tree = tree->rchild;else if (tree->rchild == NULL)tree = tree->lchild;else  tree->data = Deletemin(tree->rchild);}
}
int Deletemin(BST*& tree) {int temp;BST* p;if (tree->lchild == NULL) {temp = tree->data;p = tree;tree = tree->rchild;delete p;return temp;}else  return Deletemin(tree->lchild);
}
void Inorder(BST* tree) {if (tree != NULL) {Inorder(tree->lchild);cout << tree->data << " ";Inorder(tree->rchild);}
}
int main() {BST* tree = Create();Inorder(tree);   //中序遍历以查看排序结果cout << endl;int key;cin >> key;   //输入查找并删除的匹配值BST* p = Search(key, tree);if (p == NULL)cout << "未找到该值!" << endl;else  cout << "已搜索到:" << p->data << endl;   //输出查找到的值Delete(key, tree);Inorder(tree);   //中序遍历以查看删除结果return 0;
}

测试样例

样例1

输入:

5 1 2 4 3 7 9 6 8 0

输出:

1 2 3 4 5 6 7 8 9

继续输入查找并删除的匹配值:

9

输出:

已搜索到:9
1 2 3 4 5 6 7 8

样例2

输入:

5 1 2 4 3 7 9 6 8 0

输出:

1 2 3 4 5 6 7 8 9

继续输入查找并删除的匹配值:

10

输出:

未找到该值!
1 2 3 4 5 6 7 8 9

二叉查找树BST的删除操作相关推荐

  1. 二叉查找树 (BST)| 删除操作

    我们已经讨论了二叉查找树(BST)|搜索及插入操作.在这篇文章中,将讨论删除操作. 当我们删除一个节点时,会出现三种可能性: 1)要删除的节点是叶节点:我们只需要将该节点从树中直接删除即可 2)要删除 ...

  2. 数据结构——二叉查找树(BST)的删除

    数据结构--二叉树(BST)的删除 文章目录 数据结构--二叉树(BST)的删除 前言 一.BST删除的几种情况 二.节点删除方法 1.一般方法 2.对1方法的优化 3.懒汉删除(前继和后继) 前言 ...

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

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

  4. 二叉查找树(BST)的基本概念及常用操作

    二叉查找树 二叉查找树(Binary Search Tree),也称二叉搜索树.有序二叉树(ordered binary tree),排序二叉树(orted binary tree),是指一棵空树或者 ...

  5. c# treeview查找并选中节点_最通俗易懂的二叉查找树(BST)详解

    原来来自 呆萌数据结构-06二叉查找树​imoegirl.com 二叉查找树(Binary Search Tree),简写BST,是满足某些条件的特殊二叉树.任何一个节点的左子树上的点,都必须小于当前 ...

  6. 图解二叉树节点的查找,插入和删除操作,求高度等等运算集合

    首先这三种操作都是基于二叉查找树所进行的操作,因此开始之前应该建立二叉查找树. 查找和插入由于比较好理解,直接看代码吧. 查找和插入://这个部分参考胡昭民编著清华出版的数据结构,有所改动. #inc ...

  7. 2-3树的插入和删除操作

    注意:以下均用2-3树指代2-3查找树 2-3树的定义: 2-3树首先是一颗二叉查找树(BST树),也是一颗平衡二叉树(AVL树),所以同时包含两者的性质, 2-3树是一颗完美平衡的二叉树,也就是说所 ...

  8. 普通二叉树、二叉查找树、平衡二叉树常见操作汇总

    目录 总览表 普通二叉树 二叉查找树 平衡二叉树 总览表 普通二叉树 struct Node{int data;Node* lchild,rchild; };Node* newNode(int v){ ...

  9. 数据结构和算法分析学习笔记(三)--二叉查找树的懒惰删除(lazy deletion)

    这次的问题来自<数据结构与算法分析(C++描述)>的习题4.16,如下: -------------------------- 4.16  重做二叉查找树类以实现懒惰删除.注意,这将影响所 ...

最新文章

  1. 实现php数组编码的转换的类
  2. Java注释:类、方法和字段注释
  3. 信息学奥赛C++语言: 商品排序
  4. 如何查看某个查询用了多少TempDB空间
  5. 【图论】拉普拉斯矩阵(Laplacian matrix)
  6. cygwin1.dll is missing from your computer
  7. 百度糯米android面试题,【百度百度糯米队列百度编程基础数据安全面试题】面试问题:编程:使用C实… - 看准网...
  8. NO.5 计算数组中三个数的最大乘积
  9. C语言小程序-学生成绩统计系统
  10. 元宇宙构建基石:三维重建技术
  11. MSTAR648方案遥控器配置
  12. 编译原理归纳学习——去除晦涩
  13. 江苏智慧公厕:让厕所成为城市新名片
  14. java go to语句_Java用()来实现go to语句所特有的一些功能。A.breakB.defaultC.contin...
  15. 李永乐团队2021数学基础过关660题勘误表
  16. 水库大坝安全监测监控系统平台xmind分析+辽阳市水库大坝安全检测平台+志豪未来科技有限公司+陈志豪
  17. 单片机的PWM控制,一篇即可学废
  18. 4.Redis 所消耗的资源
  19. gitlab页脚添加备案号
  20. 计蒜客-19 幼儿园买玩具

热门文章

  1. A Java Fork/Join Framewor
  2. 不知道这几点,千万别开发微信小程序
  3. 写在前面(一些感想及纪念今天正式开始写博客)
  4. 跨域和跨域的解决方案
  5. UE4之材质参数的使用
  6. 大一期间做的小游戏*4记录
  7. 江苏徐州市“十三五”能源发展规划发布
  8. Qt 多种方式读写二进制文件
  9. 动画效果(过渡,动画)
  10. 人工智能系列:数字经济下,另类数据产生的量化投资机会