Java中的数据结构

一:数据结构的分类

      八大数据结构:又可分为线性结构、非线性结构。线性结构即每个元素只有前驱或后继,是一对一的关系。

                               分为: 数组、链表、散列表

                                          堆、栈

                                          队列、树、图

 

     区分是前序遍历、中序遍历、后序遍历的依据,以根节点为参考点,根节点在前就是前序遍历、根节点在中间就是中序遍历、根节点在后就是后序遍历。其中,中序遍历之后,是有顺序的。

    二叉查找树:又称二叉搜索树、BSL树,其就是一个链表结构,int key , int data, node leftchild , node rightchild

    满二叉树:除去叶子节点外,每个节点都达到最大的节点数,即为2

                     在左右相同的高度相等下,除了叶结点外每一个结点都有左右子叶且叶结点。

    完全二叉树:除去叶子节点外,左子树的每个节点都达到最大的节点数,即为2

                     在左右相同的高度不相等下,除了叶结点外每一个结点都有左右子叶且叶结点。

  平衡二叉树: 左子树深度 - 右子树深度=平衡因子、平衡二叉树上所有结点的平衡因子只可能是 -1,0 或 1。

------------------------------

步骤:

二叉树二叉树

若根结点的关键字值等于查找的关键字,成功

否则,若小于根结点的关键字值,递归查左子树。

若大于根结点的关键字值,递归查右子树。

若子树为空,查找不成功。

平均情况分析(在成功查找两种的情况下):

在一般情况下,设 P(n,i)为它的左子树的结点个数为 i 时的平均查找长度。如图的结点个数为 n = 6 且 i = 3; 则 P(n,i)= P(6, 3) = [ 1+ ( P(3) + 1) * 3 + ( P(2) + 1) * 2 ] / 6= [ 1+ ( 5/3 + 1) * 3 + ( 3/2 + 1) * 2 ] / 6

注意:这里 P(3)、P(2) 是具有 3 个结点、2 个结点的二叉分类树的平均查找长度。 在一般情况,P(i)为具有 i 个结点二叉分类树的平均查找长度。平均查找长度= 每个结点的深度的总和 / 总结点数

(上图应为左子树P(3),右子树P(2))

P(3) = (1+2+2)/ 3 = 5/3

P(2) = (1+2)/ 2 = 3/2∴ P(n,i)= [ 1+ ( P(i) + 1) * i + ( P(n-i-1) + 1) * (n-i-1) ] / n

∴ P(n)=

  

P(n,i)/ n <= 2(1+I/n)lnn

因为 2(1+I/n)lnn≈1.38logn 故P(n)=O(logn)

=============================

4.红黑树的各种操作的时间复杂度是多少?

能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn)

 

5.红黑树相比于BST和AVL树有什么优点?

红黑树是牺牲了严格的高度平衡的优越条件为代价,它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。

相比于BST,因为红黑树可以能确保树的最长路径不大于两倍的最短路径的长度,所以可以看出它的查找效果是有最低保证的。在最坏的情况下也可以保证O(logN)的,这是要好于二叉查找树的。因为二叉查找树最坏情况可以让查找达到O(N)。

红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高,所以在插入和删除中所做的后期维护操作肯定会比红黑树要耗时好多,但是他们的查找效率都是O(logN),所以红黑树应用还是高于AVL树的. 实际上插入 AVL 树和红黑树的速度取决于你所插入的数据.如果你的数据分布较好,则比较宜于采用 AVL树(例如随机产生系列数),但是如果你想处理比较杂乱的情况,则红黑树是比较快的

 

因为一棵由n个结点随机构造的二叉查找树的高度为lgn,所以顺理成章,二叉查找树的一般操作的执行时间为O(lgn)。但二叉查找树若退化成了一棵具有n个结点的线性链后,则这些操作最坏情况运行时间为O(n)。

红黑树虽然本质上是一棵二叉查找树,但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡,从而保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log n)。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值