20182319 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结
目录
教材学习内容总结
这一周学习的主要章节是第16、17章,其中,16章主要讲的是树的实现和二叉树与决策树。而第17章讲的则是关于二叉查找树的知识。
- 我们首先看到的是关于一些树的知识,其实我们一般用的也是一部分比较特殊的树,它们一般每个节点只会有不超过两个子节点,同时应该注意到的是它们是不一样的,我们分别称它们为左右节点,这样的树我们称之为二叉树,而我们喜欢它们的原因也是因为它们只有两个子树,这样方便判断。还应该知道的是如果一棵二叉树的每一层都是满的,那么我们称之为满二叉树,而如果它只有最右下角不是满的,我们也可以称之为完全二叉树,同时满二叉树也是完全二叉树的一种。
然后我们应该关注到的是一棵树的子树也是一棵树,所以说树是一种非常适合用递归的结构。我们一般也都通过递归的手段来实现对于一棵树的遍历,而遍历也是树的方法中最为基础的方法之一,可以说大部分的方法与遍历有关,比如插入需要找到叶子节点,查找要找到某个特定的节点,这些都离不开遍历。所以说在做树的时候对递归有一个良好的理解是十分重要的。决策树其实也是把一个一个用来提问树串起来,这样就可以通过多次提问得到某些特定的结果。其实从某种意义上来说我觉得它和二分查找有异曲同工之妙
- 关于二叉查找树则是一种比较特殊的二叉树,而它的特殊之处就在于左右子树与父节点的大小关系是绝对成立的。无论对于哪一个节点都有这样的大小规律。所以我们有实现的时候也会遇到一些以前不会遇到的困难,比如说我们的删除会需要考虑到这个规律,让我们删除有些不同。
教材学习中的问题和解决过程
- 问题1:决策树好像有点不太有用,还是每一个都要自己手打,有点废废的感觉。
- 问题1解决方案:其实无论你是用递归还是用决策树,两个都是要手打的,没有可以不用打的方法,你不把那些问题打出来怎么知道你要什么。所以两者的基础是一样的,但是决策树可以避免一些纷繁复杂的递归,其实可以省去很多步骤。
- 问题2:二叉排序树是一种比较复杂的树对于有两个子节点的节点用前驱节点和后继节点替换它有没有什么区别?
- 问题2解决方案:其实没有什么太大区别,但我们在实现的时候会发现前驱节点是不会有右树的,所以我们处理的时候就会直接把这个问题转换到原来那个比较简单的只有一个分支节点的情况。
代码调试中的问题和解决过程
- 问题1:在实现二叉排序时书上使用了一个数组迭代器,其中用到了它的add方法,尴尬的是,它根本就没有这个方法。心态炸裂。
- 解决方法:其实这个问题还是比较好解决的,经过仔细地比对发现其实它只有一个作用,就是存储,所以用linkedqueue来代替就好了。
代码托管
结对及互评
评分:12
评价
- 博客中值得学习的或问题:
对于知识点的总结还是挺详尽的,然后如果没有错题可以不要那个环节。
点评过的同学博客和代码
- 本周结对学习情况
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 62/62 | 1/1 | 30/30 |
第二周 | 188/250 | 4/5 | 17/47 |
第三周 | 619/869 | 1/6 | 18/65 |
第四周 | 386/386 | 2/8 | 20/82 |
第五周 | 909/1295 | 0/8 | 18/100 |
第六周 | 1470/2765 | 1/9 | 25/125 |
第七、八周 | 1810/4575 | 3/12 | 33/158 |
第九周 | 1816/6391 | 3/15 | 30/188 |