第九周学习

20162310林臻 《程序设计与数据结构》第九周学习总结

教材学习内容总结

  • 堆的学习及其方法的应用
  • 堆排序利用堆的基本特征对一组元素进行排序

教材学习中的问题和解决过程

  • 问题1:堆和二叉树有什么区别呢

  • 问题1解决方案:

  • 1、堆是一个完全二叉树,并且每个结点的值都大于或等于其左右孩子结点的值,具有n个结点的堆,其深度即为堆所对应的完全二叉树的深度log(n).

  • 2、在二叉排序树中,某结点的右孩子结点的值一定大于该结点的左孩子结点的值;在堆中却不一定,堆只是限定了某结点的值大于(或小于)其左右孩子结点的值,但没有限定左右孩子结点之间的大小关系。

  • 3、 在二叉排序树中,最小值结点是最左下结点,其左指针为空;最大值结点是最右下结点,其右指针为空。在大根堆中,最小值结点位于某个叶子结点,而最大值结点是大根堆的堆顶(即根结点)。

  • 4、二叉排序树是为了实现动态查找而设计的数据结构,它是面向查找操作的,在二叉排序树中查找一个结点的平均时间复杂度是O(log n);堆是为了实现排序而设计的一种数据结构,它不是面向查找操作的,因而在堆中查找一个结点需要进行遍历,其平均时间复杂度是O(n)。

  • 问题2:优先队列的原理以及实现

  • 问题2解决方案:网络上查找到了很详细的信息,博客链接

代码托管

上周考试错题总结

  • 1、虽然所有节点在完全相同的层次上的树是平衡的,但并不是所有的平衡树都具有这个属性。 所以选择A并不是最好的答案。 选项D是最好的答案,因为它正确地定义了一棵平衡树

  • 2、完整的二叉树正好有2n个叶子,因为每个叶子都在相同的高度,每个内部节点恰好有2个孩子

  • 3、水平顺序遍历按照距离根的距离顺序访问树的元素。

  • 4、后序遍历访问右侧子树,然后访问左侧子树,然后访问根。 所以,根始终是最后一个被访问的元素。

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 1/1 20/20
第二周 200/200 1/1 20/20
第三周 200/200 1/1 22/22
第四周 1000/1000 1/1 30/30
第五周 1000/1000 1/1 22/22
第六周 1000/1000 1/1 30/30
第七周 1000/1000 1/1 20/20
第八周 1000/1000 1/1 20/20
第九周 1000/1000 1/1 20/20
posted @ 2017-11-05 17:28  林臻  阅读(171)  评论(0编辑  收藏  举报