20182318 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结
教材学习内容总结
第十六章 树
- 树是非线性结构,其元素组织为一个层次结构
- 树的度表示树中的任意结点的最大子结点数
- 有m个元素的平衡n叉树的高度是lognm
- 树的遍历有4种方法
- 进行层序遍历时可采用队列来储存树中的元素
- 使用数组实现二叉树时,位于位置n的元素的左孩子在(2n+1)的位置,其右孩子在(2*(n+1))的位置
- 树的基于数组的存储链实现方式可以占数组中的连续位置,不管树是不是完全树
- 如何在一般二叉树中添加及删除元素,要取决于树的用途
- 使用决策树可以设计专家系统
第十七章
- 两种序求第三种必须用中序
使用递归遍历 - 二叉树深度=左右子树最大深度+1
用队列实现层序
大顶堆、小顶堆
- 必须是完全二叉树
- 小顶堆:根必须小于等于左右孩子
- 插入之后要重排序
删除的位置用最后一片叶子代替 - 建立:建立树,选择最后一个非终端节点,与其左右孩子的最值交换,重复操作。
二叉排序树
- 将比根小的放左子树,大于等于放右子树。
- 查找中同理。子树为空查找失败。
- 中序遍历即可排序。
- 查找失败 将查找的数放入他应该再在的位置=生成。
- 删除若有双子树用前驱或后继结点代替之,再删除前驱或后继结点。
- 平衡因子不大于一即可。若左边多将左子树设为根左子树的右子树重排
哈夫曼编码
- 定长编码:长度一样
- 概率大编码短,概率小编码长。
- 任何编码都不是其他编码的前缀
- 最优二叉树:带权路径长度最短或平均编码长度最小握
- flush的应用和追加
教材学习中的问题和解决过程
问题1:删除根出现空指针异常。
问题1解决方案:不能只改左右子树引用,其他的节点可以,但根还要改树的引用,即根结点。
问题2:高度和深度究竟有什么区别?
问题2解决方案
- 高度是指当前结点到叶子结点的最长路径,如所有叶子结点的高度都为0。
- 深度则是指从根结点到当前结点的最大路径长度,如根结点的深度为0。。
问题3:最优二叉树有什么用
问题3解决方案:哈夫曼编码,使编码更简洁,效率更高
代码调试中的问题和解决过程
-
问题1:在实现BSTNode的过程中,BSTNode find (T target)的相关内容总是出红字。而与此相对的,BTNode中的BTNode find (T target)就没有任何的问题
-
问题1解决方案:经过反复细心检查,发现是自己打错了,书上代码并没有错误。
-
问题2:如何打出二叉树的图形
-
问题2解决方案:开始没什么思路,上网查了之后,用迭代器和循环就可以解决
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1及原因( 单选题 | 1 分)
In an array implementation of a binary tree, the root of the tree is in position 0, and for each node n, n’s left child is in position ________ and n’s right child is in position ________.
A
.
2n + 1
B
.
2n + 2
C .
2(n + 1)
D
.
A and B
E
.
A and C
F
.
B and C
正确答案:E
解析:在二叉树的数组实现中,树的根在位置0,对于每个节点n, n的左子结点在位置,n的右子结点在位置A and C
。
点评过的同学博客和代码
其他(感悟、思考等,可选)
时间越来越紧张,各科的作业也越来越多。Java难度也渐渐加大了,必须要加强自主学习。真东西是等不来,抄不来的,相信在王老师英明的带领下,我们会越学越好。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
第九周 | 3577/1000 | 3/7 | 22/60 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:24小时
-
实际学习时间:20小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)