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

20182314《程序设计与设计结构》 第七周学习总结

教材学习内容总结

第十六章:

树:

(1)树(tree)是包含n(n>=0)个结点的有穷集

(2)空集合也是树,称为空树。空树中没有结点。

(3)结点的度:一个结点含有的子结点的个数称为该结点的度;

(4)叶结点或终端结点:度为0的结点称为叶结点;

(5)非终端结点或分支结点:度不为0的结点;

(6)双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;

(7)孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;

(8)兄弟结点:具有相同父结点的结点互称为兄弟结点;

(9)树的度:一棵树中,最大的结点的度称为树的度;

(10)结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;

(11)树的高度或深度:树中结点的最大层次;

(12)堂兄弟结点:双亲在同一层的结点互为堂兄弟;

(13)结点的祖先:从根到该结点所经分支上的所有结点;

(14)子孙:以某结点为根的子树中任一结点都称为该结点的子孙。

(15)森林:由m(m>=0)棵互不相交的树的集合称为森林;

2.前序遍历:从根结点开始,访问每一个结点及其孩子。(A->B->D->E->C)

3.中序遍历:从根结点开始,访问结点的左侧孩子,然后是该结点,再然后是任何剩余的结点。(D->B->E->A->C)

4.后序遍历:从根结点开始,访问结点的孩子,然后是该结点。(D->E->B->C->A)

5.层序遍历:从根节点开始,访问每一层的所有结点,一次一层。(A->B->C->D->E)

第十七章:

二叉查找树:一棵空树,或者是具有下列性质的二叉树

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)左、右子树也分别为二叉排序树;

(4)没有键值相等的结点。

平衡二叉查找树:平衡二叉搜索树是一种结构平衡的二叉搜索树,即叶节点高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

左旋和右旋:将根结点的左结点或右结点成为新的根结点,然后使原树根的左结点的右结点成为原树根的新的右结点;

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

  • 问题1:删除根出现空指针异常。

  • 问题1解决方案:
    深度定义是从上往下的,高度定义是从下往上的。
    树从根结点开始往下数,叶子结点所在的最大层数称为 树的深度。

代码调试中的问题和解决过程

  • 问题1:
    在学习教材的时候,最小生成树的方法中有这样一行代码“resultGraph[][] = Double.Positive_INFINITY”,不是很理解这里的POSITIVE_INFINITY代表什么意思。

  • 问题1解决方案: 首先来思考这样一个问题,在进行浮点数运算的时候,有时我们会遇到除数为0的情况,那我们该如何解决呢?所以引入了无限这个概念,POSITIVE_INFINITY正是可以用来代表无限。示例如下

double i = Double.POSITIVE_INFINITY;   // i表示为无限大

public static final double POSITIVE_INFINITY = 1.0 / 0.0;
  • 问题2:广度优先遍历和深度优先遍历的实现过程及其原理
  • 问题2解决方案:
    深度优先搜索的步骤为:

(1)、首先节点 1 进栈,节点1在栈顶;

(2)、然后节点1出栈,访问节点1,节点1的孩子节点3进栈,节点2进栈;

(3)、节点2在栈顶,然后节点2出栈,访问节点2

(4)、节点2的孩子节点5进栈,节点4进栈

(5)、节点4在栈顶,节点4出栈,访问节点4,

(6)、节点4左右孩子为空,然后节点5在栈顶,节点5出栈,访问节点5;

(7)、节点5左右孩子为空,然后节点3在站顶,节点3出栈,访问节点3;

(8)、节点3的孩子节点7进栈,节点6进栈

(9)、节点6在栈顶,节点6出栈,访问节点6;

(10)、节点6的孩子为空,这个时候节点7在栈顶,节点7出栈,访问节点7

(11)、节点7的左右孩子为空,此时栈为空,遍历结束。

代码托管



等等。

上周考试错题总结

本周无错题

结对及互评

点评:

  • 代码练习较多,问题较为深邃(至少我看不懂)

  • 基于评分标准我给本博客打分:16分。得分情况如下:

1.正确使用Markdown语法(加1分)

2.模板中的要素齐全(加1分)

3.教材学习中的问题和解决过程(加3分)

4.代码调试中的问题和解决过程(加4分)

5.其他加分(加7分)

6.进度条中记录学习时间与改进情况(1)

7.感想,体会不假大空(1)

8.有动手写新代码(1)

9.排版精美(1)

10.错题学习深入(1)

11.点评认真,能指出博客和代码中的问题(1)

12.结对学习情况真实可信(1)

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

最近java水平感觉有所提升,但还是不太想写书上的代码。一开始都没找到敲代码的位置,确实有点心态爆炸,希望能在跟上的同时尽量往前面撵一撵。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第7周 2000/6373 2/2 20/20

参考资料

posted @ 2019-11-19 21:44  20182314鞠明翰  阅读(120)  评论(1编辑  收藏  举报