数据结构学习-二叉搜索树-查找、插入、删除
来源:互联网 发布:如何破解MD5的网络包 编辑:程序博客网 时间:2024/05/18 00:29
#2017-12-12 2:00
#武汉工程大学邮电与信息工程学院邮科院校区
#软件工程1604谷子毅
二叉搜索树
也叫二叉排序树或二叉查找树
一颗二叉树,可以为空;如果不空,满足以下性质:
1.非空左子树的所有键值小于根节点
2.非空左子树的所有键值小于根节点
3.左右子树都是二叉搜索数
部分函数:
1.查找元素X,返回地址
2.查找最小元素,返回地址
3.查找最大元素,返回地址
4.插入
5.删除
/*查找查找从根结点开始,如果树空,返回NULL若非空,根结点与X比较,进行不同处理1.X小于,只需左边继续搜索2.X大于,只需右边继续搜索 3.X等于,返回结点指针 */ /*递归方法*/Position Find(ElementType X,BinTree BST){if(!BST) return NULL;if(X>BST->Data)return Find(X,BST->Right);else if(X<BST->Data)return Find(X,BST->Left);else(X==BST->Data)return BST;} /*非递归方法: 效率决定于树的高度*/ Position Find(ElementType X,BinTree BST){while(BST){if(X<BST->Data)BST=BST->Left;else if(X>BST->Data)BST=BST->Right;elsereturn BST}return NULL;}
/*查找最大,最小元素*/ //最大元素一定在树的最右分枝的端结点 //最小元素一定在树的最左分枝的端结点 /*查找最小元素递归法*/Position FindMin(BinTree BST){if(!BST) return NULL;else if(!BST->Left)return BST;elseFindMin(BST->Left);}/*查找最大元素非递归法*/Position FindMax(BinTree BST){if(BST)while(BST->Right)BST=BST->Right;return BST;}
/*二叉搜索树的插入*///关键是要找到元素应该插入的位置//可以采用与Find类似的方法BinTree Insert(ElementType X,BinTree BST){if(!BST){/*原树为空,则造一个根节点*/BST=malloc(sizeof(struct TreeNode))BST->Data=X;BST->Left=BST->Right=NULL;}/*开始找要插入元素的位置*/ elseif(X<BST->Data)BST->Left=Insert(X,BST->Left)/*递归插入左子树*/ else if(X>BST->Data)BST->Right=Insert(X,BST->Right)/*递归插入右子树*//*else 若X已存在,则什么都不做*/ return BST;}
/*二叉搜索树的删除*///考虑三种情况:// 删除的是叶结点:直接删除,再改父指针置为 NULL // 删除的结点有一个孩子:父结点指向要删除的结点的孩子 // 删除的结点有两个子树: 用右子树的最小元素或// 者左子树的最大元素替代被删除结点 BinTree Delete(ElementType X,BinTree BST){Position Tmp;if(!BST) printf("要删除的元素未找到");else if(X<BST->Data)BST->Left=Delete(X,BST->Left)//左子树递归删除 else if(X>BST->Data)BST->Right=Delete(X,BST->Right)else//右子树递归删除 if(BST->Left&&BST->Right){//被删除结点有两个子结点 Tmp=FindMin(BST->Right)//在右子树里找最小的元素填充删除结点 BST->Data=Tmp->Data;BST->Right=Delete(BST->Data,BST->Right)//在删除结点的右子树中删除最小元素 }else{//被删除结点有一个或无子节点 Tmp=BST;if(!BST->Left)//有右孩子或无子节点 BST=BST->Right;else if(!BST->Right)//有左孩子或无子节点 BST=BST->Left;free(Tmp);}return BST;}
阅读全文
0 0
- 数据结构学习-二叉搜索树-查找、插入、删除
- 【数据结构】二叉搜索树的删除,插入,查找
- 二叉搜索树的查找、插入、删除
- 二叉搜索树的插入,查找,删除
- 实现二叉搜索树--查找、插入、删除
- 搜索二叉树之插入、删除、查找
- 二叉搜索树查找,插入,删除
- 数据结构与算法分析--二叉排序树(二叉查找树,二叉搜索树)的查找、插入和删除操作
- 二叉搜索树的基本操作(查找、插入、删除)【数据结构】
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- 二叉搜索树的创建 && 查找 & 插入 & 删除
- 二叉搜索树的插入,删除,查找操作
- 二叉搜索树的查找、插入、删除操作
- 二叉搜索(排序)树的 查找、插入、删除
- 二叉搜索树(BST)的创建、插入、查找和删除
- 二叉搜索树的定义、查找、插入和删除
- 二叉搜索树的插入、查找、删除等操作
- 搜索二叉树的查找、插入和删除
- How to Render the Hyperlink with Braces
- How to use MathJax in Markdown
- C语言中求最大公约数的算法(三种)
- 输入一行字符,统计其中字母、数字、空格、其它字符的数量,并输出到控制台
- 重大改革!Python,最接近人工智能的语言~将被加入高考科目!
- 数据结构学习-二叉搜索树-查找、插入、删除
- 欢迎使用CSDN-markdown编辑器
- 机器学习作业9:k均值聚类
- 自建机器学习库-矩阵
- 统计学习方法 李航 第一章习题
- Keras with R (CNN)
- 统计学习方法 李航 第二章习题
- 机器学习 周志华 第一章习题
- requests的使用