数据结构之三(二叉查找树)

查找树是一种动态数据结构,支持插入、删除、查找等操作。

二叉查找树的复杂度和树的高度是成正比的。有n个节点的完全二叉树,树高为O(lgn)。但是如果树含义n个节点,如果为斜的,则成为链表,高度为O(n)。

1.        二叉查找树

每个节点最多有两个分支。对于每个节点。左孩子的任何节点小于根,根小于右孩子的任何节点

2.        二叉排序

与快排的比较。

二叉排序,使用将数组创建二叉树,再以中序输出树即得排序。

随机化算法,不是按下标顺序插入树中,而是按照随机的顺序将值插入到树中,所有n!种顺序等可能。(不是随机选择元素插入树中!)直到完全插入。与随机化快排随机选择主元类似。

3.        复杂度及实现思路

查找时间:与当前节点相等则找到;否则如果小于当前节点,则在左子树找,如果左子树空,查找失败;否则大于当前节点,则在右子树找,如果右子树空,查找失败。O(h),h为树高。

最小元素:最左边。O(h)

最大元素:最右边。O(h)。

后继:如果有右孩子,则为右孩子的最左边的孩子。否则,右孩子为空,且如果存在后继,则后继为最低(树层次上最下层满足条件)祖先节点,且该祖先节点的左孩子也为祖先。O(h),因为向上找,最多到根。

前驱:如果有左孩子,则为左孩子的最右边的孩子。否则如果左孩子为空,且如果存在前驱,则前驱为最低(树层次上最下一层满足条件)祖先节点,且该祖先节点的右孩子也为祖先。O(h),向上找,最多到根。

插入:插入的节点都是新节点,只要找到其父节点,并判断是左孩子还是右孩子即可。

删除:

如果要删除的节点无孩子,则将父节点中指向该节点的值改为NIL;

如果要删除的节点只有一个孩子,则将父节点中指向该节点的值改为指向该节点的孩子;如果有两个孩子,则先删除后继(后继最多有右孩子,如果有右孩子,则删除后继节点为第二种情况),再将后继节点替换到要删除的节点处。

(二叉查找树中,如果一个节点有两个孩子,则该节点后继无左孩子,该节点前驱无右孩子。)

 

4.        随机二叉查找树的复杂度分析。

期望、幂函数、凸函数、jensen不等式。

随机构造的二叉查找树,期望高度为O(lgn)。

5.        应用

二叉查找与最小堆区别和联系。

中序遍历非递归算法,使用栈的方法,不用栈的方法。

前序遍历、后序遍历。

6.        基数树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值