二叉查找树
来源:互联网 发布:js变量命名的规则 编辑:程序博客网 时间:2024/06/07 05:35
1. 查找
Status SearchBST(BiTree T, KeyType key, BiTree f, BiTree &p){ if(!T) { //查找不成功 p=f; return false; } else if (key == T->data.key) { //查找成功 p=T; return true; } else if (key < T->data.key) return SearchBST(T->lchild, key, T, p); else return SearchBST(T->rchild, key, T, p);}
2. 插入
Status InsertBST(BiTree *T, ElemType e){ if(!T) { s = new BiTNode; s->data = e; s->lchild = s->rchild = NULL; T=s;//被插節点*s为新的根结点 } else if(e.key == T->data.key) return false;//关键字等于e.key的数据元素,返回錯誤 if (e.key < T->data.key)InsertBST(T->lchild, e);//將e插入左子樹 else InsertBST(T->rchild, e);//將e插入右子樹 return true; }
3. 删除
Status DeleteBST(BiTree *T, KeyType key){ //若二叉查找树T中存在关键字等于key的数据元素时,则删除该数据元素,并返回 //TRUE;否则返回FALSE if(!T) return false;//不存在关键字等于key的数据元素 else{ if(key == T->data.key) { // 找到关键字等于key的数据元素 return Delete(T); } else if(key < T->data.key) return DeleteBST(T->lchild, key); else return DeleteBST(T->rchild, key); }}Status Delete(BiTree *p){ //该节点为叶子节点,直接删除 BiTree *q, *s; if (!p->rchild && !p->lchild) { delete p; p = NULL; } else if(!p->rchild){//右子树空则只需重接它的左子树 q=p->lchild; p->data = p->lchild->data; p->lchild=p->lchild->lchild; p->rchild=p->lchild->rchild; delete q; } else if(!p->lchild){//左子树空只需重接它的右子树 q=p->rchild; p->data = p->rchild->data; p->lchild=p->rchild->lchild; p->rchild=p->rchild->rchild; delete q; } else{//左右子树均不空 q=p; s=p->lchild; while(s->rchild){ q=s; s=s->rchild; }//转左,然后向右到尽头 p->data = s->data;//s指向被删结点的“前驱” if(q!=p)//q为s的parent, 但q有可能为p q->rchild = s->lchild;//重接*q的右子树 else q->lchild = s->lchild;//重接*q的左子树 delete s; } return true;}
0 0
- 查找--二叉查找树
- 二叉树、二叉查找树
- 二叉树 & 二叉查找树
- 【查找结构】二叉查找树
- 查找之二叉树查找
- 查找之二叉树查找
- 查找:二叉查找树总结
- 二叉树查找树...
- 二叉树查找树
- 查找--遍历二叉树
- 二叉查找树
- 二叉查找树实现
- 二叉查找树
- 动态二叉查找树
- 最优二叉查找树
- 二叉查找树
- 二叉查找树
- 平衡二叉查找树
- Android悬浮窗置于任务栏之上
- 让服务器能支持10万并发数秘诀,亲身经历,站在巨人的肩膀上创造
- Volley+ListView制作留言栏
- Spring2 Bean详解
- sklearn——PCA&LDA
- 二叉查找树
- DataX配置定时任务
- 换个账号继续
- 开发程序员常用接口
- linux IO复用笔记_更新中
- 查看keystore相关信息
- Seq2Seq源码解析(基于Theano框架)
- 本地搭建redis服务器笔记
- 日常