1.二叉查找树是一种含有附加属性的二叉树,即其左孩子小于父结点,父结点小于或等于右孩子数据结构
2.一棵由n个结点随机构造的二叉查找树的高度为lgn,因此瓜熟蒂落,二叉查找树的通常操做的执行时间为O(lgn)。但二叉查找树若退化成了一棵具备n个结点的线性链后,则这些操做最坏状况运行时间为O(n)学习
操做 说明 addElement 往树中添加一个元素 removeElement 从树中删除一个元素 removeAllOccurrences 从树中删除所指定元素的任何存在 removeMin 删除树中的最小元素 removeMax 删除树中的最大元素 findMin 返回一个指向树中最小元素的引用 findMax 返回一个指向树中最大元素的引用
3.链表实现二叉查找树:每一个BinaryTreeNode中的对象要维护一个指向结点存储元素的引用,还要维护指向结点的每一个子树的引用字体
1.自己首先是一棵二叉查找树。带有平衡条件:每一个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。设计
1.本质上是一棵二叉查找树,但它在二叉查找树的基础上增长了着色和相关的性质使得红黑树相对平衡,从而保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log n)调试
2.根结点为黑色。code
3.每一个叶子结点(null)是黑色。对象
4.从树根到树叶的每条路径都包含有一样数目的黑色结点(黑键数)。rem
5.若是一个结点的颜色为红色,那么它的子结点一定是黑色。input
6.在红黑树中,元素的查找仍然是一种O(n)操做,因为红色结点不能有红色孩子,因而路径中至多有一半结点时红色结点、至少有一半结点是黑色结点,据此咱们能够论证红黑树的最大高度约为2*logn,因而遍历最长路径的序仍然是logn。(即最长遍历路径相同。)博客
1.添加或删除红黑树中的节点以后,红黑树就发生了变化,可能不知足红黑树的5条性质,也就再也不是一颗红黑树了,而是一颗普通的树。而经过旋转,可使这颗树从新成为红黑树。简单点说,旋转的目的是让树保持红黑树的特性。
2.当一棵树的最大路径长度大于log2^n,或最小路径长度小于log2^n-1时,就要平衡化该树。当左子树过长,则对左子树进行右旋,若右子树过长,则对右子树进行左旋。若左子树的右子树过长,进行左右旋。若右子树的左子树过长,进行右左旋。对X进行左(右)旋,意味着"将x变成一个左(右)节点"。
1.对于平衡树插入后不平衡的状况,通旋转使树达到平衡。
2.在讨论红黑树的插入操做以前必需要明白,任何一个即将插入的新结点的初始颜色都为红色。这一点很容易理解,由于插入黑点会增长某条路径上黑结点的数目,从而致使整棵树黑高度的不平衡。但若是新结点父结点为红色时(以下图所示),将会违返红黑树性质:一条路径上不能出现相邻的两个红色结点。这时就须要经过一系列操做来使红黑树保持平衡
3.红黑树插入元素后,先旋转为平衡二叉树,然后根据红黑树的五条性质对结点进行染色。
问题1:在作蓝墨云实验的时候,创立了input文件后始终出现filenotfound的异常。
问题1解决方案:询问了赵乾晨同窗后,发现本身的input文件始终没有标注位置。