可爱的坏人

 

20172327 2018-2019-1 《程序设计与数据结构》第六周学习总结

20172327 2018-2019-1 《程序设计与数据结构》第六周学习总结

教材学习内容总结

第十章 树

概述


1.树是一种非线性结构,其元素被组织成一个层次结构。

2.树由一个包含结点和边的集构成,元素被储存在结点中,边将一个结点和另一个结点连接起来。

3.每个结点都在一个特定层,根是位于该树顶层的唯一结点。

4.树中较低层的结点是上层结点的孩子,由同一个上层结点产生的多个结点互相称为兄弟,没有任何孩子的结点被称为叶子,至少有一个孩子的结点被称为内部结点。

5.通过计算根到结点所必须经过的边数目,就可以确定其路径长度。

6.树的高度是指从根到叶子最远的路径长度。

7.树中任一结点可以具有的最大孩子数目被称为度,孩子数目无限制的树称为广义树,每个结点限制不超过n个孩子的树称为n元树。

8.结点具有两个孩子的树称为二叉树。

9.平衡树:叶子都位于同一层或相差不超过一层的树称为平衡树。

10.M个元素的n元树具有的高度为lognM,一棵含有个结点的平衡二叉树具有的高度为log2N。

11.完全树:底层所有的叶子都靠左边排列的平衡树。
满树:叶子都位于同一层,且每一个结点要么是叶子,要么是正好具有n个孩子。

12.树的基本术语:

实现树的策略


1.树的数组实现之计算策略:
对于任何储存在数组位置n处的元素而言,左孩子放在2n+1处,右孩子放在2(n+1)处.


2.树的数组实现之模拟链接策略:
按照先来先服务的基准连续分配数组位置,每一个结点存储的是每一个孩子(可能还有双亲)的数组索引。不过这种方式增加了删除的成本。


3.树的分析:
在n相对较小时,相对于树所涉及的成本,树实现和线性结构之间并不存在特别显著的差别,但是,随着n的增加,树的效率就会越发引人注意。

树的遍历


1.前序遍历:从根结点开始,访问每个子结点及其孩子。


2.中序遍历:从根结点开始,访问结点的左孩子,然后时该结点,再然后时任何剩余结点。


3.后序遍历:从根结点开始,访问结点的孩子,然后是该结点。


4.层序遍历:从根结点开始,访问每一层的所有结点,一次一层。


5.二叉树的遍历:二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。二叉树的遍历方式有很多,主要有前序遍历,中序遍历,后序遍历。

  • 前序遍历
      前序遍历的规则是:若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再前序遍历右子树

  • 中序遍历
      中序遍历的规则是:若树为空,则空操作返回;否则从根节点开始(注意并不是先访问根节点),中序遍历根节点的左子树,然后是访问根节点,最后中序遍历右子树。可以看到,如果是二叉排序树,中序遍历的结果就是个有序序列。

  • 后序遍历
      后序遍历的规则是:若树为空,则空操作返回;然后先遍历左子树,再遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。

二叉树


1.二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。

2.满二叉树(完美二叉树Perfect Binary Tree)

A Perfect Binary Tree(PBT) is a tree with all leaf nodes at the same depth. 
All internal nodes have degree 2.

一个深度为k(>=-1)且有2^(k+1) - 1个结点的二叉树称为完美二叉树。


3.完全二叉树(Complete Binary Tree)

A Complete Binary Tree (CBT) is a binary tree in which every level, 
except possibly the last, is completely filled, and all nodes 
are as far left as possible.

完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。


4.完满二叉树(Full Binary Tree)

A Full Binary Tree (FBT) is a tree in which every node other than the leaves has two children.

换句话说,所有非叶子结点的度都是2。(只要你有孩子,你就必然是有两个孩子。)
注:Full Binary Tree又叫做Strictly Binary Tree。

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

  • 问题1:树的完全性是什么?
  • 解决方案:完全树从根结点到倒数第二层满足满树,最后一层可以不完全填充,其叶子结点都靠左对齐。满树一定是一棵完全树。
  • 问题2:树的度,节点的度,树的高度,深度以及节点的层次有什么区别?
  • 解决方案:
    1.节点的度分为0,1,2.及表示节点所含的分支个数。
    2.树的度分为0,1,2即表示一棵树中最大节点的度,即哪个节点的子节点最多,它的度就是树的度。
    3.树的高度,即从叶子节点开始,自底向上增加。
    4.树的深度与树的高度相反,从根节点向下增加。

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

  • 问题1:在实现ArrayOrderedListTest测试时,我遇到了显示最后一个数字时,人家显示为null这个问题。
    图片
  • 解决分析,在我对前面ArrayList类检查时,发现我在显示last时,将rear-1不小心写成rear了,所以它所读取的是最后一个后边的,所以肯定为空。

代码托管

结对及互评

正确使用Markdown语法(加1分)
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, (加3分)
代码调试中的问题和解决过程, 无问题
感想,体会真切的(加1分)
点评认真,能指出博客和代码中的问题的(加1分)

  • 20172317
    基于评分标准,我给以上博客打分:4分。得分情况如下:

  • 20172320
    基于评分标准,我给以上博客打分:8分。得分情况如下:

    • 结对学习内容
      • 教材第10章,运行教材上的代码
      • 完成课后自测题,并参考答案学习
      • 完成程序设计项目:至少完成PP10.1、PP10.3、PP10.5

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

这周学的有点麻烦,栈还行,就是链表有点糊涂。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 8/8
第二周 1306/1306 1/2 20/28
第三周 1291/2597 1/3 18/46
第四周 4361/6958 2/3 20/66
第五周 1755/8713 1/6 20/86
第六周 3349/12062 1/7 20/106

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

  • 计划学习时间:10小时

  • 实际学习时间:8小时

  • 改进情况:

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

参考资料

posted on 2018-10-25 22:27  可爱的坏人  阅读(226)  评论(0编辑  收藏  举报

导航