标签:笔记 错题 直接 破坏 重要 返回 header 排序 次数
addElement:往树中添加一个元素
removeElement:从树中删除一个元素
removeAllOccurrences:从树中删除所指定元素的任何存在
removeMin:删除树中的最小元素
removeMax:删除树中的最大元素
findMin:返回一个指向树中最小元素的引用
findMax:返回一个指向树中最大元素的引用
addElement操作:就是根据给定元素的值,在树中的恰当位置添加该元素。
如果该元素不是Comparable,该方法会抛出NoComparableElementException异常。
如果树为空,该元素称为新结点。
如果树非空,则依据二叉查找树的性质,分别与某结点及其左右孩子比较,按照左孩子<父节点,父节点<=右孩子的规则将其添加到适当位置,或者称为左右孩子的孩子。
向二叉树中添加元素
removeElement操作:从二叉查找树中删除一个元素时,必须推选出另一个结点(replacement方法找到这个结点)来代替要被删除的那个结点。
在树中找不到给定目标元素时,抛出ElementNotFoundException异常。
选择替换结点的三种情况
被删除结点没有孩子,则replacement返回null
被删除结点只有一个孩子,replacement返回这个孩子
被删除结点有两个孩子,replacement返回中序后继者(因为相等元素会放到右边)
removeAllOccurrences操作:从二叉查找树中删除指定元素的所有存在。
在树中找不到给定目标元素时,抛出ElementNotFoundException异常。
如果该元素不是Comparable,该方法会抛出ClassCastException异常。
该方法会调用一次removeElement方法,以确保当树中根本不存在指定元素时会抛出异常。
如果树中还含有目标元素,就会再次调用removeElement方法。
removeMin操作:据二叉查找树的定义,最右侧存最大的结点,最左侧存最小元素。
如果树根没有左孩子,根结点为最小,右孩子变为新的根结点。
如果左孩子是叶子结点,将父结点的引用设为null即可。
如果左孩子是内部结点,则这个左孩子的右孩子将代替自己成为它父节点的左孩子。
红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(Null)是黑色。 [注意:这里叶子节点,是指为空(NULL)的叶子节点!]即每个空结点为黑色,也即默认结点为黑色
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
问题1解决方案:当在二叉排序树中插入一个节点时,首先检查是否因插入而破坏了平衡,若 破坏,则找出其中的最小不平衡二叉树,在保持二叉排序树特性的情况下,调整最小不平衡子树中节点之间的关系,以达 到新的平衡。所谓最小不平衡子树 指离插入节点最近且以平衡因子的绝对值大于1的节点作为根的子树。
问题2解决方案:
红黑树的插入,总是把插入的新元素的颜色设为红色,在插入过后极大可能会导致一系列操作以再次平衡红黑树。
红黑树的删除,与插入类似,删除一个元素后有极大可能需要一系列操作以再次平衡红黑树。
教材中代码调试有问题先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,如果别人没有提出相同问题,可以编辑文档添加,然后把自己提出的问题复制到下面:
(statistics.sh脚本的运行结果截图)
...
xxx
xxx
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
20172325 2018-2019-2 《Java程序设计》第七周学习总结
标签:笔记 错题 直接 破坏 重要 返回 header 排序 次数
原文地址:https://www.cnblogs.com/20172325DYK/p/9899181.html