20182318 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结

20182318 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结

教材学习内容总结

第十六章 树

  1. 树是非线性结构,其元素组织为一个层次结构
  2. 树的度表示树中的任意结点的最大子结点数
  3. 有m个元素的平衡n叉树的高度是lognm
  4. 树的遍历有4种方法
  5. 进行层序遍历时可采用队列来储存树中的元素
  6. 使用数组实现二叉树时,位于位置n的元素的左孩子在(2n+1)的位置,其右孩子在(2*(n+1))的位置
  7. 树的基于数组的存储链实现方式可以占数组中的连续位置,不管树是不是完全树
  8. 如何在一般二叉树中添加及删除元素,要取决于树的用途
  9. 使用决策树可以设计专家系统

第十七章

  • 两种序求第三种必须用中序
    使用递归遍历
  • 二叉树深度=左右子树最大深度+1
    用队列实现层序

大顶堆、小顶堆

  • 必须是完全二叉树
  • 小顶堆:根必须小于等于左右孩子
  • 插入之后要重排序
    删除的位置用最后一片叶子代替
  • 建立:建立树,选择最后一个非终端节点,与其左右孩子的最值交换,重复操作。

二叉排序树

  1. 将比根小的放左子树,大于等于放右子树。
  2. 查找中同理。子树为空查找失败。
  3. 中序遍历即可排序。
  4. 查找失败 将查找的数放入他应该再在的位置=生成。
  5. 删除若有双子树用前驱或后继结点代替之,再删除前驱或后继结点。
  6. 平衡因子不大于一即可。若左边多将左子树设为根左子树的右子树重排

哈夫曼编码

  • 定长编码:长度一样
  • 概率大编码短,概率小编码长。
  • 任何编码都不是其他编码的前缀
  • 最优二叉树:带权路径长度最短或平均编码长度最小握
  • 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

点评过的同学博客和代码

  • 本周结对学习情况
    • 20182333
      20182317
    • 结对照片
    • 结对学习内容
      二叉树的遍历,排序,堆排序

其他(感悟、思考等,可选)

时间越来越紧张,各科的作业也越来越多。Java难度也渐渐加大了,必须要加强自主学习。真东西是等不来,抄不来的,相信在王老师英明的带领下,我们会越学越好。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第九周 3577/1000 3/7 22/60

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:24小时

  • 实际学习时间:20小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2019-11-19 21:59  J~oker  阅读(131)  评论(1编辑  收藏  举报