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的左右孩子为空,此时栈为空,遍历结束。
代码托管
等等。
上周考试错题总结
本周无错题
结对及互评
- 本周结对学习情况:
20182330
点评:
代码练习较多,问题较为深邃(至少我看不懂)
基于评分标准我给本博客打分: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 |
参考资料
《Java程序设计与数据结构教程(第二版)》
什么是面向对象和面向过程