二叉查找树、平衡树与B-树.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉查找树、平衡树与B-树.ppt

二叉排序树BST(二叉搜索树) 3. 在二叉排序树上的操作 1)查找 例 在如下二叉排序树中查找关键字为60的记录 查找算法的一种递归实现 BiTree SearchBST(BiTree T, KeyType key,BiTree f) { //二叉排序树用二叉链表存储。在根指针T所指二叉排序树中递归地查找关键字等于key的记录,若查找成功,则返回该记录结点的指针,否则返回空指针 if(!T)|| EQ(key, T-data. key) return(T); //T为空或查找成功,返回 else if LT(key, T-data. key) { //在左子树中继续查找 f=T; return(SearchBST(T-lchild, key, f )); } //在右子树中继续查找 f=T; return(SearchBST(T-rchild, key, f)) }//SearchBST 性能分析:二叉排序树的查找效率与树的形态有关,若树的形态为“单枝”,二叉排序树的查找就“退化”为顺序查找;若树的形态比较“平衡”,二叉排序树的查找与二分查找类似; 查找算法的一种非递归实现 BiTree SearchBST(BiTree T, KeyType key,BiTree f) { //二叉排序树用二叉链表存储。在根指针T所指二叉排序树中查找关键字等于key的记录,若查找成功,则返回该记录结点的指针,否则返回空指针 f=NULL; p=T; while(!p){ if(EQ(key, p-data. key) return(p); //查找成功,返回 if LT(key, p-data. key){ f=p; p=p-lchild; //在左子树中继续查找 } else {f=p; p=p-rchild} //在右子树中继续查找 }//while return(NULL); //T为空 }//SearchBST 插入算法:在查找不成功时插入 Status InsertBST(BiTree T, ElemType e) { //当二叉排序树T中不存在关键字等于e.key的记录时,插入e并 //返回TRUE,否则返回FALSE. if(!SerchBST(T,e.key,NULL){ s=(BiTree)malloc(sizeof(BiTNode)); s-data=e; s-lchild=s-rchild=NULL; if (!T) T=s; else if LT(e.key, f-data.key) f-lchild=s; else f-rchild=s; return TRUE; } else return FALSE; } //InsertBST 插入算法:在插入点不确定时插入 Status InsertBST(BiTree T, BiTree s) { //将指针S所指结点插入到以T为根的二叉树排序树中. if (!T) T=s; else if LT(s-data.key, f-data.key) InsertBST(T-lchild ,s); else InsertBST(T-rchild ,s); return OK; }// InsertBST 被删除结点的不同情况分析: 平衡二叉树(AVL树) 1. 定义 为防止退化现象,可以考虑在建树过程中降低树高。1962年俄国数学家G.M.Adel’son-Vel’skii和E.Mlandis提出平衡的二叉检索树.平衡的二叉检索树:或者是一颗空树;或者是具有下列性质的二叉树:其左右子树的高度之差不超过1 ,并且其左右子树也分别为平衡的二叉检索树 RR型平衡旋转——一次逆时针旋转 失衡原因:在A的右孩子的右子树上插入结点并导致A的平衡因子由-1变为-2。 调整操作:“提升”B为新子树的根结点;A下降为B的左孩子,同时将B原来的左子树BL调整为A的右子树。如下图: LR型平衡旋转—一次逆时针旋转+一次顺时针旋转 失衡原因:在A的左孩子的右子树上插入结点

文档评论(0)

dmz158 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档