二叉排序树的查询、插入和删除操作
2016-03-16 21:54
387 查看
//二叉排序树查找 //创建二叉树的结点结构定义 typedef struct BiTNode { int data; struct BiTNode *lchild, *rchild; }BiTNode,*BiTree; //递归查找二叉排序树T中是否存在key //指针f指向T的双亲,其初始调用值为NULL //若查找成功,则指针p指向该数据元素结点,并返回TRUE //若查找不成功,p指向查找路径访问的最后一个结点,并返回FALSE Status Search_BST(BiTree T, int key, BiTree f, BiTree *p) { if(!T) { *p = f; return false; } else if(key == T->data) { *p = T; return true; } else if(key<T->data) return Rearch_BST(T->lchild,key,T,p); else if(key>T->data) return Rearch_BST(T->rchild,key,T,p); }
//二叉排序树插入操作,如果找不到key,就将key插入到合适的位置 Status InsertBST(BiTree T, int key) { BiTree p,s; if(!Search_BST(T,key,NULL,&p)) { s = (BiTree)malloc(sizeof(BiTNode)); s->data = key; s->lchild = s->rchild = NULL; if(!p) { T = s; } else if(key<p->data) { p->lchild = s; } else if(key>p->data) { p->rchild = s; } return true; } else { return false; } }
//二叉排序树删除操作 Status DeleteBST(BiTree T, int key) { if(!T) return false; else { if(key == T->data) return Delete(T); else if(key<T->data) return DeleteBST(T->lchild,key); else return DeleteBST(T->rchild,key); } } Status Delete(BiTree p) { BiTree q,s; if(p->rchild==NULL)//右子树为空 { q = p; p = p->lchild; free(q); } else if(p->lchild==NULL)//左子树为空 { q = p; p = p->rchild; free(q); } else //左右子树均不为空 { q = p; s = p->lchild; while(s->rchild) { q = s; s = s->rchild; } p->data = s->data; if(q!=p && !(s->lchild)) { q->rchild = s->lchild; } else { q->lchild = s->lchild; } free(s); } return true; }
相关文章推荐
- win8无线网络不稳定怎么办?win8无线网络不稳定解决方法
- Android中圆形图的几种实现方式
- Android 4G模块调试总结
- 小猫统计制作教师资格证批量打印过程中,长字符字段被截取并丢失部分字符问题的解决
- Android应对进程被杀死--Service(四) 通过JNI实现守护进程,使Service服务不被杀死
- 快速排序
- 比较两个数的大小
- clang: error: linker command failed with exit code 1 (use -v to see invocation)解决方法
- AugularJS 初入门
- [leetcode 285] Inorder Successor in BST---查找二叉搜索树中某个节点在中序遍历中的后续节点
- ArcEngine环境下合并断开的线要素(根据属性)
- 《内核设计与实现》第五章读书笔记
- 如何使用THashedStringList
- 重构第4天:降低方法(Push Down Method)
- HDU 1010 Tempter of the Bone
- css代码片段第一季
- [网络流24题][CODEVS1915]分配问题(网络流)
- TMS320F28335学习笔记——ADC详解
- 解决sql关键字冲突
- poj 1364 king