二叉判定树和二叉查找树_二叉排序树和二叉搜索树

二叉判定树和二叉查找树_二叉排序树和二叉搜索树​[数据结构笔记]8 二叉搜索树及其常见操作1、查找问题:分静态查找和动态查找[静态查找]如果是有序序列,二分查找比顺序查找快很多。查找次数==发生比较的次数,取决于生成二叉判定树的深度由于二叉判定树是完全二叉树,所以判定树深度是:[log2

​[数据结构笔记]8 二叉搜索树及其常见操作   1、查找问题:分静态查找和动态查找   [静态查找]   如果是有序序列,二分查找比顺序查找快很多。   查找次数==发生比较的次数,取决于生成二叉判定树的深度   由于二叉判定树是完全二叉树,所以判定树深度是:[log2 n]+1 换算阶O(log2 n)   最好:1 最坏:O(log2 n)   [动态查找]   查找序列可能有增删素,不过始终保证是有序排列   -》 这种问题借助 二叉搜索树(普通的树没有排序,就没法确定新增素的位置了,所以一定是搜索树)。   二叉搜索树可能是完全二叉树,也可能不是。   依然,查找次数==发生比较的次数,因此最坏情况下的搜索效率依然取决于树深度。   同一n个节点按照搜索树规则建立搜索树,形成的树并不确定。只有顺序确定树才是唯一的。   同一n个节点,根据插入顺序不同,会形成不同深度的二叉搜索树,不过都满足左树所有<根<右树所有的规则:
二叉判定树和二叉查找树_二叉排序树和二叉搜索树
二叉判定树和二叉查找树_二叉排序树和二叉搜索树ASL是平均计算长度,都叫搜索树……它们的查找效率不同   越接近完全二叉树,深度越小,ASL也越小,效率整体越高:   如果n个节点排成完全二叉树,搜索次数最大值O(log n),这是最理想的;   如果n个节点排成斜二叉树,搜索次数最大值O( n),这是最不理性的;   这说明安排插入的顺序很关键,毕竟建树就是为了查找!   尽量建成完全二叉树,实在不行就尽量建成接近它的平衡树   如果不是完全二叉树,但是接近完全二叉树,也能获得不错的效率,搜索次数最大值接近O(log n),仅次于完全二叉树,   -》后面的平衡二叉树   2、二叉搜索树 BST   左树所有<根<右树所有   常见的操作:findXfindMinfindMaxinsertXdeleteX   3、findX的实现   1)递归实现   这是一个尾递归,尾递归都可以用循环实现。   2)迭代实现   效率与树的高度有关。   而同样n个节点的树,高度是不同的。尽量平衡高度会比较小。   4、findMin的实现(可递归可迭代)找到最靠左的素)   5、findMax同理,这里用迭代   化简   6、insertX   这个插入不需要改变已有!只是新增一个叶子节点   用了递归   关于为什么函数有返回?为了递归的实现!   递归到尽头时,不仅要新建一个节点,还要让已经存在的上一个节点指向它。不返回去递归调用的上一层,如何做到?   7、deleteX   删除一个节点需要考虑父节点和子节点。   可能会改变父节点的Next;   删除的节点可能有0、1、2个子节点,分别考虑。子节点如果存在,需要用字节点填充。   尤其是有2个子节点的情况,应取左子树最大,或者,右子树最小。   找到待删除素bt时,怎么样再去找到父节点(需要修改Next)?   这里依然用递归返回,把bt返回到上一层递归函数,那里就有父节点。   这里函数返回仅2种可能:删了没有填充返回NULL,删了被填充或者没有找到返回原bt   因此这样bt->right=deleteX(bt->right,X);没有问题。   8、判断题   若一搜索树(查找树)是一个有n个结点的完全二叉树,则该树的最大值一定在叶结点上.(x)   完全二叉树的最大值可能有左儿子,所以最大值不一定在叶结点上   若一搜索树(查找树)是一个有n个结点的完全二叉树,则该树的最小值一定在叶结点上.(√)   感觉最小值节点也可能有右儿子?只有有右儿子一定有左儿子,才是完全二叉树!

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/46936.html

(0)
上一篇 2024年 9月 4日 下午10:10
下一篇 2024年 9月 4日

相关推荐

关注微信