二叉搜索树(BST,基本操作实现)
来源:互联网 发布:linux安装办公软件 编辑:程序博客网 时间:2024/05/17 06:36
二叉搜索树(Binary Search Tree)也叫做二叉排序树或者二叉查找树。
相比正常的二叉树就是多了一条性质:左子树的键值小于其根节点的键值,右子树反之,左右子树都是二叉搜索树。
主要操作函数:(还是递归递归递归!!!)
Position Find( ElementType X, BinTree BST ):从二叉搜索树BST 中查找元素X,返回其所在结点的地址;
Position FindMin( BinTree BST ):从二叉搜索树BST中查找并返回 最小元素所在结点的地址;
Position FindMax( BinTree BST ) :从二叉搜索树BST中查找并返回 最大元素所在结点的地址。
BinTree Insert( ElementType X, BinTree BST ) :插入节点。
BinTree Delete( ElementType X, BinTree BST ):删除节点。
#include<stdio.h>#include<stdlib.h>#define ElementType inttypedef struct BiNode{ ElementType Data; struct BiNode* Left; struct BiNode* Right;} BiNode, *BinTree,*Position;Position Find( ElementType X, BinTree BST ) //尾递归{ if( !BST ) return NULL; /*查找失败*/ if( X > BST->Data ) return Find( X, BST->Right ); /*在右子树中继续查找*/ if( X < BST->Data ) return Find( X, BST->Left ); /*在左子树中继续查找*/ /* X == BST->Data */ return BST; /*查找成功,返回结点的找到结点的地址*/}Position IterFind( ElementType X, BinTree BST ) //迭代{ while( BST ) { if( X > BST->Data ) BST = BST->Right; /*向右子树中移动,继续查找*/ else if( X < BST->Data ) BST = BST->Left; /*向左子树中移动,继续查找*/ else /* X == BST->Data */ return BST; /*查找成功,返回结点的找到结点的地址*/ } return NULL; /*查找失败*/}Position FindMin( BinTree BST )//一直往最左递归找就是了{ if( !BST ) return NULL; /*空的二叉搜索树,返回NULL*/ if( !BST->Left ) return BST; /*找到最左叶结点并返回*/ return FindMin( BST->Left ); /*沿左分支继续查找*/}Position FindMax( BinTree BST )//一直往右找{ if(BST ) while( BST->Right ) BST = BST->Right; /*沿右分支继续查找,直到最右叶结点*/ return BST;}BinTree Insert( ElementType X, BinTree BST )//类似于find{ if( !BST ) /*若原树为空(或递到最后),生成并返回一个结点的二叉搜索树*/ { BST = (Bintree)malloc(sizeof(struct TreeNode)); BST->Data = X; BST->Left = BST->Right = NULL; } else /*开始找要插入元素的位置*/ if( X < BST->Data ) BST->Left = Insert( X, BST->Left); /*递归插入左子树*/ else if( X > BST->Data ) BST->Right = Insert( X, BST->Right); /*递归插入右子树*/ /* else X已经存在,什么都不做 */ return BST;}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;}//判断是否为二叉搜索树,传入MIN MAX为足够小足够大的数即可。//还可以根据中序遍历是否递增来判断是否为二叉搜索树。在中序遍历递归基础上可以轻松完成!bool IsBST(BinTree root,int MIN,int MAX){ if(!root)return true; if(root->Data<=MIN||root->Data>=MAX) return false; return IsBST(root->Left,MIN,root->Data)&&IsBST(root->Right,root->Data,MAX);}
阅读全文
0 0
- 二叉搜索树(BST,基本操作实现)
- 二叉搜索树(BST)的基本操作
- 二叉搜索树(BST)的基本操作
- 数据结构:二叉搜索树(BST)的基本操作
- java实现二叉搜索树(BST)相关操作
- 搜索二叉树(BST)的实现
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- <数据结构与算法>二叉搜索树(BST)的基本操作(C语言描述)
- 二叉查找树(搜索树)BST各类操作(c++完整实现)
- *BST(二叉搜索树)
- 二叉搜索树(BST)
- (BST)二叉搜索树的操作(一)
- (BST)二叉搜索树操作(二)
- C语言实现二叉查找树(BST)的基本操作
- BST(二叉搜索树) Java 实现解析
- Java实现 二叉搜索树算法(BST)
- Java实现 二叉搜索树算法(BST)
- Java实现 二叉搜索树算法(BST)
- linux测进程带宽工具
- MANIFEST.MF的用途
- Java 实现自动登陆
- hibernate取树形结构返回Json时死循环
- Java学习第三周(2)--面向对象第二天
- 二叉搜索树(BST,基本操作实现)
- Java内存模型与线程
- 转载-Java后端程序员1年工作经验总结
- 为什么 JDK 9 在生产环境中很少被采用?
- 阿里巴巴招聘工人老师傅做人工智能,当P8年薪百万
- 最好用的开源Web漏洞扫描工具梳理
- 张朝阳的一张作息表刷爆朋友圈!网友惊呼太拼了
- 工作日常--在上海的一大难题就是年终换房子
- win7 无线共享有线