1. 排序二叉树java
排序二叉树是一种特殊结构的二叉树,能够很是方便地对树中全部节点进行排序和检索。算法
排序二叉树要么是一棵空二叉树,要么是具备下列性质的二叉树:ide
图 1 显示了一棵排序二叉树:性能
图 1. 排序二叉树spa
对排序二叉树,若按中序遍历就能够获得由小到大的有序序列。如图 1 所示二叉树,中序遍历得:.net
{2,3,4,8,9,9,10,13,15,18}
1.1 建立排序二叉树code
建立排序二叉树的步骤,也就是不断地向排序二叉树添加节点的过程,向排序二叉树添加节点的步骤以下:htm
当程序从排序二叉树中删除一个节点以后,为了让它依然保持为排序二叉树,程序必须对该排序二叉树进行维护。维护可分为以下几种状况:blog
(1)被删除的节点是叶子节点,则只需将它从其父节点中删除便可。排序
(2)被删除节点 p 只有左子树,将 p 的左子树 pL 添加成 p 的父节点的左子树便可;被删除节点 p 只有右子树,将 p 的右子树 pR 添加成 p 的父节点的右子树便可。
(3)若被删除节点 p 的左、右子树均非空,有两种作法:
2.平衡二叉树
平衡二叉树:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,而且左右两个子树都是一棵平衡二叉树。构造与调整方法 平衡二叉树的经常使用算法有红黑树、AVL、Treap等。 最小二叉平衡树的节点的公式以下 F(n)=F(n-1)+F(n-2)+1 这个相似于一个递归的数列,能够参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
3.红黑树
3.1红黑树的性质
红黑树在原有的排序二叉树增长了以下几个要求:
Java 中实现的红黑树可能有如图 6 所示结构:
备注:本文中全部关于红黑树中的示意图采用白色表明红色。黑色节点仍是采用了黑色表示。
根据性质 5:红黑树从根节点到每一个叶子节点的路径都包含相同数量的黑色节点,所以从根节点到叶子节点的路径中包含的黑色节点数被称为树的“黑色高度(black-height)”。
性质 4 则保证了从根节点到叶子节点的最长路径的长度不会超过任何其余路径的两倍。假若有一棵黑色高度为 3 的红黑树:从根节点到叶节点的最短路径长度是 2,该路径上全是黑色节点(黑节点 - 黑节点 - 黑节点)。最长路径也只可能为 4,在每一个黑色节点之间插入一个红色节点(黑节点 - 红节点 - 黑节点 - 红节点 - 黑节点),性质 4 保证毫不可能插入更多的红色节点。因而可知,红黑树中最长路径就是一条红黑交替的路径。
由此咱们能够得出结论:对于给定的黑色高度为 N 的红黑树,从根到叶子节点的最短路径长度为 N-1,最长路径长度为 2 * (N-1)。
提示:排序二叉树的深度直接影响了检索的性能,正如前面指出,当插入节点自己就是由小到大排列时,排序二叉树将变成一个链表,这种排序二叉树的检索性能最低:N 个节点的二叉树深度就是 N-1。
红黑树经过上面这种限制来保证它大体是平衡的——由于红黑树的高度不会无限增高,这样保证红黑树在最坏状况下都是高效的,不会出现普通排序二叉树的状况。
因为红黑树只是一个特殊的排序二叉树,所以对红黑树上的只读操做与普通排序二叉树上的只读操做彻底相同,只是红黑树保持了大体平衡,所以检索性能比排序二叉树要好不少。
但在红黑树上进行插入操做和删除操做会致使树再也不符合红黑树的特征,所以插入操做和删除操做都须要进行必定的维护,以保证插入节点、删除节点后的树依然是红黑树
答案是:ABCD