二叉查找树

一、什么是二叉查找树?

二叉查找树,是一种二叉树。要求在树中任意一个节点,其左子树的每个节点的值,都要小于这个节点的值,而右子树节点的值都要大于这个节点的值

二、二叉查找树的查找、插入和删除操作


二叉查找树的查找,从根节点开始查找,如果等于根节点,则查找结束,如果小于根节点,则从左子树开始递归查找,如果大于根节点,则从右子树开始递归查找。
二叉查找树的插入操作:如果要插入的数据比节点的数据大,并且节点的右子树为空,就将数据直接插入到右子节点的位置,如果不为空,就递归遍历右子树,查找插入位置。同理,如果插入的数据比节点数据小,则插入左子节点或遍历左子树
二叉查找树的删除操作:
第一种情况,要删除的节点没有子节点,只需要直接将父节点中,指向要删除节点的指针置为null
第二种情况,要删除的节点只有一个子节点,需要更新父节点中,指向要删除节点的指针,让它指向要删除节点的子节点就可以了。
第三种情况是,如果要删除的节点有两个子节点。需要找到这个节点的右子树中的最小节点,把它替换到要删除的节点上没然后再删除掉这个最小节点。

三、如何通过二叉查找树获取一个有序数列?


中序遍历二叉查找树,能够输出有序的数据序列,时间复杂度为O(n),非常高效。


四、支持重复数据的二叉查找树:


方法1、重复的数据放在一个节点中
方法2:如果节点的值相同,插入的数据放到这个节点的右子树。查找的时候遇到相同的节点,并不停止查找,而是继续在右子树中查找,知道遇到叶子节点才停止。


五、二叉查找树和散列表的比较:


1、散列表是无序存储的,如果需要输出有序数据,需要先排序。而对于二叉查找树,只需要中序遍历,就可以在O(n)的时间复杂度内输出有序的数据序列
2、散列表扩容耗时很多,当遇到散列冲突时,性能不稳定。
3、散列表的构造比较复杂,需要散列函数的设计、扩容、缩容等
4、装载因子不能太大,特别是基于开放寻址法解决冲突的散列表

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页