动态查找表之二叉排序树
2013-04-18 21:59
316 查看
二叉排序树(Binary Sort Tree)或者是一棵空树;或者是具有如下性质的二叉树:1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值 2)若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值 3)它的左右子树也分别为二叉排序树。
二叉排序树的查找
二叉排序树的插入
二叉排序树的删除
为什么会有平衡二叉树呢?
二叉排序树的查找性能:最好的情况是,二叉排序树的形态和折半查找的判定树相同,其平均查找长度和lgn成正比;最坏的情况下,二叉排序树为单支树(因为序列本来就有序),这时平均查找长度为(n+1)/2。 在随机情况下,二叉排序树的平均查找长度和lgn是等数量级的。
为了避免最坏情况的出现,对二叉树进行平衡化处理,这就是为什么会出现平衡二叉树。
二叉排序树的查找
int SearchBST(BiTree T,KeyType key, BiTree f,BiTree &p) { //在根指针T所指二叉排序树中递归地查找其关键字等于key的数据元素,若查找成功, //则指针p指向该数据元素节点,并返回true,否则指针p指向查找路径上访问的 //最后一个节点并返回false,指针f指向T的双亲,其初始调用值为NULL 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); }
二叉排序树的插入
int InsertBST(BiTree &T,ElemType e) { //当二叉排序树T中不存在关键字等于e.key的数据元素时,插入e并返回true,否则,返回false if(!SearchBST(T,e,NULL,p) { s = (BiTree)malloc(sizeof(BiTNode)); s->data= e; s->lchild=s->rchild=NULL; if(!p) T=s; else if(e.key<p->data.key) p->lchild=s; else p->rchild=s; return true; } else return false; }
二叉排序树的删除
int DeleteBST(BiTree &T, KeyType key) { //若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素节点 //并返回true,否则,返回false if(!T) return false; else { if(key==T->data.key) return Delete(T); else if(key<T->data.key) return DeleteBST(T->lchild,key); else return DeleteBST(T->rchild,key); } }
int Delete(BiTree &p) { //从二叉排序树中删除节点p,并重接它的左或右子树 if(!p->lchild) {q=p;p=p->rchild;free(q);} else if(!p->rchild) {q=p;p=p-lchild;free(q);} else //左右子树均不空 { q=p;s=p->lchild; while(p->rchild) { q=s; s=s->rchild; } p->data= s->data; if(q!=p) q->rchild=s->lchild; else q->lchild=s->lchild; free(s); } return true; }
为什么会有平衡二叉树呢?
二叉排序树的查找性能:最好的情况是,二叉排序树的形态和折半查找的判定树相同,其平均查找长度和lgn成正比;最坏的情况下,二叉排序树为单支树(因为序列本来就有序),这时平均查找长度为(n+1)/2。 在随机情况下,二叉排序树的平均查找长度和lgn是等数量级的。
为了避免最坏情况的出现,对二叉树进行平衡化处理,这就是为什么会出现平衡二叉树。
相关文章推荐
- 动态查找表之二叉排序树(BST)的 创建、查找、插入与删除
- C语言-数据结构-二叉排序树与平衡树算法实现及演示
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树在不借助新节点只修改指针转换为双链表
- 动态查找表--二叉排序树的实现
- 05年华中科大机试第三题(输入一个字符串,建立一个二叉排序树,并中序遍历输出)
- 二叉查找树(二叉排序树)操作大全C++实现
- 二叉排序树经典算法速成
- 二叉排序树的查找与遍历C版
- 数据结构试验:二叉排序树
- 一步一步复习数据结构和算法基础-二叉排序树
- 动态查找—二叉排序树
- 二叉排序树的源码
- 查找算法(III)二叉排序树(B树)和平衡树(AVL树)
- 二叉排序树
- 二叉排序树
- hdu 3999(二叉排序树)