数据结构与算法分析:树

来源:互联网 发布:老电影修复软件 编辑:程序博客网 时间:2024/05/22 06:09

二叉树

二叉树是每个节点最多有两个子树的树结构。通常子树被称作"左子树"(left subtree)和"右子树"(right subtree

二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1

 

 

 

 

二叉查找树

平均查找:O(logn)

平均插入:O(logn)

平均删除(惰性删除):O(logn)

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

3)左、右子树也分别为二叉排序树;

 

AVL-平衡的二叉查找树

最坏查找:O(logn)

最坏插入:O(logn)

最坏惰性删除:O(logn)

平衡二叉查找树,又称 AVL树。它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子不超过1也就是说AVL树每个节点的平衡因子只可能是-101(左子树高度减去右子树高度)。

通过单旋转双旋转操作可以将一个不平衡的二叉查找树转为平衡。

伸展树

所有最坏M次操作时间o(MlogN)

伸展树保证M次操作的序列的最坏摊还运行时间为0(Mlog(N)),伸展树通过展开操作(类似于旋转),将已经查询过的节点放到根节点上,将其相邻的节点也加高高度。

该树仅保证M次的的最坏操作为0(MlogN),但是不保证每一次的操作时间都为logN

B

平均操作时间:o(logmN),其中m为叉的数量

是一种多路搜索树(并不是二叉的):

1.定义任意非叶子结点最多只有M个儿子;且M>2

2.根结点的儿子数为[2, M]

3.除根结点以外的非叶子结点的儿子数为[M/2, M]

4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)

5.非叶子结点的关键字个数=指向儿子的指针个数-1

6.非叶子结点的关键字:K[1], K[2],, K[M-1];且K[i] < K[i+1]

7.非叶子结点的指针:P[1], P[2],, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;

8.所有叶子结点位于同一层;

如:(M=3

 

红黑树

所有操作最坏情况:Ologn

而红黑树,能保证在最坏情况下,基本的动态几何操作的时间均为Olgn)。

 

ok,我们知道,红黑树上每个结点内含五个域,colorkeyleftright。如果相应的指针域没有,则设为NIL

 

一般的,红黑树,满足以下性质,即只有满足以下全部性质的树,我们才称之为红黑树(近似平衡)

 

1)每个结点要么是红的,要么是黑的。

2)根结点是黑的。

3)每个叶结点,即空结点(NIL)是黑的。

4)如果一个结点是红的,那么它的俩个儿子都是黑的。

5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。

0 0
原创粉丝点击