标签:应该 一周 伸展树 深度 sdn 很多 之间 reference 学习总结
本周学习了第11章:二叉查找树。在本章中,主要探讨了二叉查找树的概念和各种二叉查找树实现,考察为二叉查找树添加和删除元素的算法以及维护平衡二叉查找树的算法
插入元素(addElement):
(1)不允许插入相同关键字,若二叉查找树中存在该关键字,则不插入
(2)我们可以先检索二叉树,看查找树中是否含有该关键字,若不存在,再做一次扫描将结点插入到适当位置。使用这种方式,为插入一个该关键字,做了两次扫描。
删除元素(removeElement):
在二叉查找树中删除一个给定的结点p有三种情况:
(1)结点p无左右子树,则直接删除该结点
(2)结点p有左子树(右子树),则把p的左子树(右子树)接到p的父节点上
(3)左右子树同时存在,找到结点p的中序直接后继结点s,把结点s的数据转移到结点p,然后删除结点s,由于结点s为p的右子树总最左的结点,因而s无左子树,删除结点s.
左右子树的高度差为二,旋转有两种::单旋转,双旋转。无论单旋转还是双旋转,都满足先进行与深度较高的子树同名(右子树对右旋转)旋转,如果是双旋转则随后进行异名(右子树对左旋转)旋转
实现二叉查找树:红黑树
问题1:不明白书中removeElement方法中部分代码的意思。书中解释是:
如果被删除结点有两个孩子,则返回中序后继者(因为相等元素会放到右边)
代码是
问题1的解决:删掉冗余代码。
问题2: 实现add自我递归时出现的错误。首先是死递归,其次是出现了一行不明错误提醒。
问题2的解决:先是来解决不明错误提醒,我通过百度后得知:
原来Junit4中的测试方法的方法名首字母不能大写!!!
通过修改代码后,我发现是因为我的node直接定义成了root,所以在每次递归的时候又开始之前的路,就变成了死递归,在删除代码·node=root
后测试就出来了。但是由于toString问题没有解决,我用了中序遍历,但是还是出现了很令人伤心的结果,但通过找最大最小值,看的出来,我的插入方法已经成功将1插入了二叉查找树。
问题3的解决:通过询问郭恺同学,借用了上周运算表达树中PrintTree的输出方法,稍作修改,就很完美的实现了树形的正确输出啦。
这道题我真的没有找到图,所以不知道她平不平衡。所以没啥好说的······给出的答案是true。
20172304: 对于学习知识点掌握应该是挺好的,上课时对问题反应很迅速。本次博客教材学习中的问题和解决过程和代码问题都写的不是很详细,望继续改进。
今天早上的经济学原理课程听得我很快乐。范老师十分幽默风趣,讲到了:在我们面临稀缺而选择实现效益最大化时就要体现自身价值,在“万类霜天竞自由”的场景下是需要我们去保持核心竞争力的。
上课时我进行了自我的反问。从前,我从不想将自己放在与人竞争的位置,只想尽量做好自己。至少在我看来,同人相比较是件不光彩的事,每个个体没有相同的轨迹和需要被比较的必要。但现在想来,在生活的时时刻刻我又何尝不是处在竞争的环境下呢?所以,做好自己并不去打扰别人的努力,自我奋斗去实现自身价值即可。至于对待结果的态度,从一而终。
二叉查找树这一章很有意思也不太容易完全理解但是呢,事物的发展不是直线式前进的,而是螺旋式上升的。所以我们既要看到道路的曲折,也要看到前途的光明!
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 0/0 | 1/1 | 8/8 |
第二周 | 621/621 | 1/2 | 12/20 |
第三周 | 678/1299 | 1/3 | 10/30 |
第四周 | 2734/4033 | 1/4 | 20/50 |
第五周 | 1100/5133 | 1/5 | 20/70 |
第六周 | 1574/6707 | 2/7 | 15/85 |
第七周 | 1803/8510 | 1/8 | 20/105 |
20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
标签:应该 一周 伸展树 深度 sdn 很多 之间 reference 学习总结
原文地址:https://www.cnblogs.com/LXY462283007/p/9896551.html