20172304 《程序设计与数据结构》第六周学习总结

20172304 《程序设计与数据结构》第六周学习总结

教材学习内容总结

本周主要学习的是树的内容,树由结点和边组成,位于树中较低层的结点是上一层结点的孩子。一个结点只有一个双亲,统一双亲的两个节点称为兄弟。没有任何孩子的 的结点称为叶子。一个至少有一个孩子的非根结点称为一个内部结点。如果一个结点在从跟开始的路径中位于另一结点之上,则该节点就是它的祖先。沿着其实子某一特定节点的路径可以的到达的结点是该节点的子孙。

10.1.1树的分类

树中任一结点可以具有的最大孩子数目交租该树的度。对结点所含有的孩子数目无限制的数称为广义树。我们将每一节点先只为不超过n个孩子的树称为一棵n元树。节点最多具有两个孩子的树称为二叉树。如果一个树的所有叶子都位于同一层或者至少彼此相差不超过一个层就称之是平衡的。一棵含有m个结点的平衡n元树具有的高度为lognm。

完全树:如果某树是平衡的,且所有叶子都位于树的左边,则认为树是完全的。完全树在每个k层上都具有2^k个结点。

满树:如果一棵n、元树的所有叶子都位于同一层且没一结点要么是一篇叶子要么正好具有n个孩子,则称树是满的。

10.2实现树的策略

10.2.1树的数组实现值计算策略。

使用数组来储存一棵树:对于任何储存在数组位置n处的元素而言,该元素的左孩子将储存在位置2n+1处,该元素的右孩子则储存在位置(2×n+1)处。

10.2.2数的数组实现之模拟链接策略

树的遍历:前序遍历,中序遍历,后序遍历,层序遍历。

名称 内容
前序遍历 从根结点开始,访问每一结点及其孩子
中序遍历 从根结点开始,访问结点的左孩子,然后是该结点,再然后是任何剩余结点。
后序遍历 从根结点开始,访问结点的孩子,然后是该结点。
层序遍历 从根结点卡斯和,访问每一层的所有结点,一次一层

前序遍历

伪代码

Visit node
Traverse(left child)
Traverse(right child)

中序遍历

伪代码

Traverse(left child)
Visit node
Traverse(right child)

层序遍历

伪代码

Create a queue called nodes
Create an unordered list called results
Enqueue the root onto the nodes queue
While the root onto the nodes queue
While the nodes queue is not empty
{
     Dequeue the first element from the  queue
     If that element is not null
         Add that element to the rear of the results list
         Enqueue the children of the element
     Else
         Add null on the result list
}
Return an iterator for the result list

10.4 二叉树

二叉树基本操作方法

操作 说明
getRoot 返回指向二叉树的引用
isEmpty 判定该树时是否为空
size 判定树中的元素数目
contains 判定目标是否在该树中
find 如果找到指定元素,则返回指向其的引用
toString 返回树的字符串表示
itertorInOrder 为树的中序遍历返回一个迭代器
itertorPreOrder 为树的前序遍历返回一个迭代器
itertorPostOrder 为树的后续遍历返回一个迭代器
itertorLevelOrder 为树的层序遍历返回一个迭代器

二叉树的应用:表达式树,背部疼痛诊断器

用链表实现二叉树

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

  • 问题1:
  • 问题1解决方案:
  • 问题2:
  • 问题2解决方案:

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

  • 问题1:XXXXXX
  • 问题1解决方案:XXXXXX
  • 问题2:XXXXXX
  • 问题2解决方案:XXXXXX

    错题总结

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

-错题一

-问题解答:这道题错的原因是我错将书上的查找的时间复杂度错认为二叉树的时间复杂度。列表的时间复杂度是与查找方法有关的,但是二叉树的查找必须要遍历每个元素。所以时间复杂度应该是O(n)。

  • 错误二

    -问题解答:错将不能连续分配看成了能够连续分配。

  • 错误三

    -问题解答:中序遍历从根节点开始,访问结点的左孩子,然后是该结点,再然后是任何剩余结点。

点评过的同学博客和代码

  • 上周博客互评情况

    20172304郭恺同学本次的博客十分优秀,对教材的总结详略得当,而又针对自己在教材中发现的问题进行了深入的鞭辟入里的思考与解答。整个过程看起来赏心悦目给人一种美的享受。

    20172328李馨雨同学的博客十分的完整与丰富,体现了她认真的学习态度。

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

    本周经过了学习了解了树的相关知识,树与其说是一种数据结构更不如说是逻辑结构。他是建立在基础数据结构之上的,比如数组,栈,或者链表。合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。只有经过充分的积累。充分学习了基础的数据结构,才能做出跟多优秀的代码。才能更好的建设中国特色社会主义。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 30/30 1/1 10/10
第二周 766/796 1/2 40/50
第三周 817/1613 1/3 20/70
第四周 1370/3983 2/5 30/100
第五周 1235/5214 1/6 10/110
第六周

参考资料

原文地址:https://www.cnblogs.com/15248252144dzx/p/9847019.html

时间: 2024-08-28 14:24:32

20172304 《程序设计与数据结构》第六周学习总结的相关文章

20172304 《程序设计与数据结构》 第二周学习总结

20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合可以分为两大类线性集合和非线性集合 线性集合:其元素按直线方式组织的集合. 非线性集合:其元素按某种非直线方式组织的集合.例如按层次结构或按网状结构. 3.1.1抽象数据类型 集合十一找给你隐藏了实现细节的抽象 数据类型:一组值及作用于这些数值上的各种操作. 抽象数据:类型(Absttract Data Ty

学号20172328《程序设计与数据结构》第九周学习总结

学号20172328<程序设计与数据结构>第九周学习总结 教材学习内容总结(异常和递归) 第11章:异常 1.[异常处理]: 一个异常:是一个定义非正式情况或错误的对象,由程序或者运行时环境抛出,可以根据需要捕获和处理. 错误:错误类似于异常,但是错误代表不可恢复的问题并且必须捕获处理. 2.[处理异常的三种方法]:①根本不处理异常②当异常发生时处理异常③在程序的某个位置集中处理异常. 3.[未捕获的异常]:如果程序中不处理异常,则程序将非正常的终止运行,并产生关于描述在何处发生什么异常的信息

20172314 2017-2018-2 《程序设计与数据结构》第一周学习总结

20172314 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 本书第一章为计算机系统概述,前面是一些计算机相关的基础知识,让我对计算机有了一个总体的认识,不再是一片空白了,对主存储器和CPU影响深刻,主存储器用于保存程序和数据,CPU执行程序指令.在接下来的Java编程语言与程序开发部分,开始看的时候有点迷茫,不是很理解,后来先按照作业中附带的流程完成一些代码托管之后,接触了完整的简单的程序之后,再回过头来看书,看到的一些陌生的名词在脑海中就有了实际的对应,

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

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常(exception):定义非正常情况下或错误的情况的对象,由程序或运行时环境抛出,可根据需要进行相应的捕获处理. 异常与错误的区别:错误代表不可恢复的问题并且必须捕获处理.而异常可以忽视,或者使用try语句处理,或调用更高级的方法. 可检测异常与不可检测异常:可检测异常必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来.在方法定义的声明头中追加一条throws子句.不可检测异常不需要使

20172322 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172322 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常 学会了使用try-catch来实现未捕获的异常的处理.可以使得异常被捕获进而不导致程序出现错误退出.使用try写入可能产生异常的语句,使用catch来编写在捕获异常后继续执行的代码(可以为空). "未捕获的异常"指在编译过程中不会被编译软件显示异常但是在运行时会出现异常导致程序直接退出,例如:"ArithmeticException"."In

20172311 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172311 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本周对异常和递归进行了学习 异常的处理方式有两种:一种是直接抛出,并从异常处终止程序:另一种是捕获并处理异常,从而使程序继续运行. 捕获和处理异常主要运用try-catch语句. 通过继承Exception类可以自定义一个新的异常 处理IO异常的常用方法是抛出异常. 对于某些问题,递归是最精炼和适当的解法,但对于其他问题,递归则不如迭代方法直接. 教材学习中的问题和解决过程 问题:什么是IO操作

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

20172327 2018-2019-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 第十五章 图 无向图 1.图的概念(非线性结构):允许树中每个结点与多个结点相连,不分父子结点. 2.图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: 边由连接的定点对来表示,如:(A,B),(C,D),表示两顶点之间有一条边. 3.无向图:顶点之间无序连接. 如:边(A,B)意味着A与B之间的连接是双向的,与(B,A)的含义一样. 4.邻接(邻居):两个顶点之间有边连接. 5.自

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

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 图:图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的.与树的区别在于树中的一个结点只有一个前驱,也就是说只有一个父结点.但图中的顶点(结点)是没有这种限制关系的. 无向图:边为无需结点对的图.也就是说,现有两个顶点A.B.(A,B)与(B,A)效果相同.当两个顶点之间有边连接,也就是说这两个顶点是邻接的,也称作邻居.一个顶点

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

20172333 2018-2019-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.无向图 ①无向图的定义 图是由结点与结点相连接构成的,与树类似.这些结点被常常称作顶点(vertice),这些顶点的连接叫做边(edge). 无向图(undirected graph)是一种边为无序结点对的图. 两个顶点之间有一条连通边的顶点,我们称作它们为领接的(adjacent).这两个顶点也叫作邻居(neighbor),自己是自己的

2017-2018-20172309 《程序设计与数据结构》第九周学习总结

2017-2018-20172309 <程序设计与数据结构>第九周学习总结 一.教材学习内容总结 一些概念: 图: 是一种复杂的非线性数据结构. 图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为: G=(V, E) 其中: V 是顶点的有穷非空集合, E 是 V 中顶点偶对(称为边)的有穷集. 通常,也将图 G 的顶点集和边集分别记为 V(G) 和 E(G) . E(G) 可以是空集.若 E(G) 为空,则图 G 只有顶点而没有边. 有向图: 若图 G中的每条边都是有方向的,则称