DS06数据结构树-二叉排序树.ppt
《DS06数据结构树-二叉排序树.ppt》由会员分享,可在线阅读,更多相关《DS06数据结构树-二叉排序树.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、回顾:二分查找, 当线性表中数据元素是按大小顺序排列存放时,可以采用二分法 (折半查找)。,二分查找是每次在要查找的数据集合中取出中间元素关键字Kmid与要查找的关键字K进行比较,根据比较结果确定是否要进一步查找。 当 Kmid=K ,查找成功; 当 K Kmid,将在Kmid右半部分继续下一步查找 以此类推,每步的查找范围都将是上一次的一半。,优点:查找效率高 缺点:要求线性表有序,如果是进行动态查找,即需要对线性表进行插入、删除或排序操作,就必须移动大量的记录,当记录数很多时,这种移动的代价很大。,第4章 树,4.4二叉搜索树,第4章 树,判定树的特点: 左子树的值都比根结点小 右子树的值
2、都比根结点大 中序遍历判定树得到的是一组有序的序列, 11个元素的二分查找判定树,4.4二叉搜索树,能否根据以上特点,利用树型结构来动态创建查找表呢?,第4章 树,4.4二叉搜索树,【定义】一个二叉搜索树是一棵二叉树,它可以为空。如果不为空,它将满足以下性质: 非空左子树的所有键值小于其根结点的键值。 非空右子树的所有键值大于其根结点的键值。 左、右子树都是二叉搜索树。,二叉搜索树,“二叉搜索树(BST,Binary Search Tree)”也称二叉排序树或二叉查找树,它是一种对排序和查找都很有用的特殊二叉树。, 二叉搜索树的动态查找, 二叉搜索树作为抽象数据结构的定义与普通二叉树相同,但操
3、作集中多了下列几个特别的函数:, Position Find( ElementType X, BinTree BST ):从二叉搜索树BST中查找元素X,返回其所在结点的地址; Position FindMin( BinTree BST ):从二叉搜索树BST中查找并返回最小元素所在结点的地址; Position FindMax( BinTree BST ) :从二叉搜索树BST中查找并返回最大元素所在结点的地址。,第4章 树,4.4二叉搜索树, BinTree Insert( ElementType X, BinTree BST ) BinTree Delete( ElementType X
4、, BinTree BST ),typedef Position BinTree, 二叉搜索树的查找操作Find,第4章 树,4.4二叉搜索树,查找从根结点开始,如果树为空,返回NULL,表示未找到关键字为X的结点。 若搜索树非空,则根结点关键字和X进行比较,依据比较结果,需要进行不同的处理: 若根结点键值小于X,满足条件的结点将不会出现在它的左子树,接下来的搜索只需在右子树中进行; 如果根结点的键值大于X,接下来的搜索将在左子树中进行; 若两者比较结果是相等,搜索完成,返回指向此结点的指针。, 二叉搜索树的查找操作Find,第4章 树,4.4二叉搜索树,Position Find( Elem
5、entType X, BinTree BST ) if( !BST ) return NULL; /查找失败 if( X BST-Data ) return Find( X, BST-Right ); /在右子树中继续查找 else if( X Data ) return Find( X, BST-Left ); /在左子树中继续查找 else /X = BST-Data return BST; /查找成功,返回找到结点的地址 ,Position IterFind( ElementType X, BinTree BST ) while( BST ) if( X BST-Data ) BST =
6、 BST-Right; /向右子树中移动,继续查找 else if( X Data ) BST = BST-Left; /向左子树中移动,继续查找 else / X = BST-Data return BST; /查找成功,返回结点的找到结点的地址 return NULL; /查找失败 , 由于非递归函数的执行效率高,一般采用非递归的迭代来实现查找。 很容易将“尾递归”函数改为迭代函数,第4章 树,4.4二叉搜索树, 查找最大和最小元素,第4章 树, 最大元素一定是在树的最右分枝的端结点上 最小元素一定是在树的最左分枝的端结点上,4.4二叉搜索树,第4章 树,4.4二叉搜索树,Position
7、 FindMax( BinTree BST ) if( !BST ) while( BST-Right ) BST = BST-Right; /沿右分支继续查找,直到最右叶结点 return BST; ,Position FindMin( BinTree BST ) if( !BST ) return NULL; /空的二叉搜索树,返回NULL else if( !BST-Left ) return BST; /找到最左叶结点并返回 else return FindMin( BST-Left ); /沿左分支继续查找 ,代码4.16 查找最小元素的递归函数,代码4.17 查找最大元素的迭代函数
8、, 二叉搜索树的插入,第4章 树,4.4二叉搜索树,分析将元素X插入二叉搜索树BST中关键是要找到元素应该插入的位置。位置的确定可以利用与查找函数Find类似的方法,如果在树BST中找到X,说明要插入的元素已存在,可放弃插入操作。如果没找到X,查找终止的位置就是X应插入的位置。,BinTree Insert( ElementType X, BinTree BST ) if( !BST ) /若原树为空,生成并返回一个结点的二叉搜索树 BST = malloc(sizeof(struct TreeNode); BST-Data = X; BST-Left = BST-Right = NULL;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ds06 数据结构 二叉排序树
限制150内