标签:inter 元素 ISE 两种 link 设计项目 tps 哪些 search
操作 | 说明 |
---|---|
addElement | 往树中添加一个元素 |
removeElement | 从树中删除一个元素 |
removeAllOccurrences | 从树中删除所指定元素的任何存在 |
removeMin | 删除树中的最小元素 |
removeMax | 删除树中的最大元素 |
findMin | 返回一个指向树中最小元素的引用 |
findMax | 返回一个指向树中最大元素的引用 |
操作 | LinkedList | BinarySearchTreeList |
---|---|---|
removeFirst | O(1) | O(logn) |
removeLast | O(n) | O(logn) |
remove | O(n) | O(logn)* |
first | O(1) | O(logn) |
last | O(n) | O(logn) |
contains | O(n) | O(logn) |
isEmpty | O(1) | O(1) |
size | O(1) | O(1) |
add | O(n) | O(logn)* |
add操作和remove操作都可能导致树变得不平衡
平衡化技术中通用的术语
?右旋:左孩子绕着其父结点向右旋转
?使树根的左孩子元素称为新的根元素
?使原跟元素成为这个新树根的右孩子元素
?使原树根的左孩子的右孩子成为原树根的新的左孩子
?左旋:指右孩子绕其父节点向左旋转
?使树根的右孩子元素成为新的根元素
?使原树根元素成为这个新树根的左孩子元素
?使原树根右孩子结点的左孩子成为原树根的新的右孩子
?右左旋:对于由树根右孩子的左子树中较长路径而导致的不平衡,必须先让树根右孩子的左孩子,绕着树根的右孩子进行一次旋转,然后再让所得的树根右孩子绕着树根进行一次左旋
?左右旋:对于由树根左孩子的右子树中较长路径而导致的不平衡,必须先让树根左孩子的右孩子,绕着树根的左孩子进行一次旋转,然后再让所得的树根左孩子绕着树根进行一次左旋
AVL树
?平衡化树的一般性方法,自树根而下的路径最大长度必须不超过log2 n,而且自树根而下的路径最小长度必须不小于log2 n -1,AVL树是上述树的一种变体,ALV树中任何两个结点的高度差值最大不超过1
?右子树的高度减去左子树的高度称为该结点的平衡因子,若平衡因子大于1或小于-1,则以该结点为树根的子树需要重新平衡
?树或树的任何子树只有两种途径能变得不平衡:插入结点和删除结点
?AVL树的右旋:如果某结点的平衡因子为-2,则意味着该结点的左子树中有一条过长的路径,若其左孩子的平衡因子为-1,则意味着较长的路径处在这个左孩子的左子树中,需将左孩子绕着初始结点进行一次右旋
?AVL树的左旋:如果某结点的平衡因子为+2,则意味着该结点的右子树中有一条过长的路径,若其右孩子的平衡因子为+1,则意味着较长的路径处在这个右孩子的右子树中,需将右孩子绕着初始结点进行一次左旋
红黑树
?规则
?根结点为黑色
?红色结点的所有孩子都为黑色
?从树根到树叶的每条路径都包含同样数目的黑色结点
?红黑树中的平衡限制没有AVL树严格,但它们的序仍然是logn
?红黑树元素插入
?把新元素的颜色设为红色
?插入元素后,重新平衡化该树,根据需要改变元素的颜色
?设置树根的颜色为黑色
解决方案:
解决方案:尚未解决
无测试
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/2 | 20/20 | |
第二周 | 328/328 | 1/3 | 20/40 | |
第三周 | 1597/ 1925 | 1/4 | 20/60 | |
第四周 | 1153/3850 | 1/5 | 20/80 | |
第五周 | 1583/5433 | 1/6 | 20/100 | |
第六周 | 1515/6948 | 1/7 | 20/120 |
20172320 2018-2019-1 《Java程序设计》第七周学习总结
标签:inter 元素 ISE 两种 link 设计项目 tps 哪些 search
原文地址:https://www.cnblogs.com/garolwz/p/9879354.html