20172304《程序设计与数据结构》第六周学习总结(代码片段)

15248252144dzx 15248252144dzx     2023-01-12     802

关键词:

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
第六周

参考资料
























201723142017-2018-2《程序设计与数据结构》第六周学习总结

201723142017-2018-2《程序设计与数据结构》第六周学习总结教材学习内容总结数组是一个含有多个值的列表,每个值存在于数组中特定的,具有编号的位置。数组的声明:(1)int[]xxx=newint[3];表示实例化数组xxx后,为其预留了存放三... 查看详情

20172304《程序设计与数据结构》第四周学习总结(代码片段)

20172304《程序设计与数据结构》第四周学习总结教材学习内容总结第六章主要介绍了列表,这个列表是一种概念上的笼统的定义。列表包括链表和数组。列表分为:有序列表,无序列表,索引列表。有序列表其元素按照元素的某... 查看详情

201723272017-2018-2《程序设计与数据结构》第六周学习总结

学号2017-2018-2《程序设计与数据结构》第X周学习总结教材学习内容总结-数组元素:1.具有N个值的数组索引为0~(N-1).-声明和使用数组:1.可以用new运算符实例化数组,为数组分配保存值的内存空间。在Java中,数组是必须实例化的... 查看详情

20172301《程序设计与数据结构》第六周学习总结(代码片段)

20172301《程序设计与数据结构》第六周学习总结教材学习内容总结树的概述树由一个包含结点和边的集构成。树(一种非线性结构,其中的元素被组织成一个层次结构)结点:树中的一个位置。边:树中两个结点的连接。根结点:... 查看详情

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

201723302018-2019-1《程序设计与数据结构》第六周学习总结教材学习内容总结树1、树是非线性结构,其元素组织为一个层次结构2、树的度表示树中的任意结点的最大子结点数3、有m个元素的平衡n叉树的高度是lognm4、树的遍历有4种... 查看详情

201723232018-2019-1《程序设计与数据结构》第六周学习总结(代码片段)

201723232018-2019-1《程序设计与数据结构》第六周学习总结教材学习内容总结本周学习了第10章树10.1概述树是一种非线性结构,有一个包含结点和边的集构成。元素保存在结点中,边则将结点连接起来。一些术语根结点是位于树顶... 查看详情

第六周作业(代码片段)

201652272018-4《Java程序设计》第六周学习总结教材学习内容总结第八章String类是Java学习中需要掌握的一种基础类StringTokenizer类:构造一个分析器Scanner类:用于解析出字符序列中所需要的数据StringBuffer类:与String类不同的是其对象... 查看详情

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

20172304《程序设计与数据结构》第三周学习总结教材学习内容总结第五章主要对队列进行了介绍,队列从一端进入从量一端删除,队列遵循先进先出的原则(FirstinFirstoutFIFO)队列ADT应该包含的方法||操作||说明||||------||--------------... 查看详情

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

201823182019-2020-1《数据结构与面向对象程序设计》第六周学习总结教材学习内容总结第九章多态后绑定。效率低于编译阶段的绑定效率。学习练习如何利用继承方式来实现多态性。学习练习如何利用接口来实现多态性。多态性设... 查看详情

201723282018-2019《java软件结构与数据结构》第六周学习总结(代码片段)

201723282018-2019《Java软件结构与数据结构》第六周学习总结概述Generalization本周学习了第十章:非线性集合与数据结构--树。主要讨论了树的使用和实现,以及考察实现和使用树的实例。教材学习内容总结Asummaryoftextbook树(tree):... 查看详情

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

20172304《程序设计与数据结构》第二周学习总结教材学习内容总结本周主要学习了第三章和第四章的内容第三章集合概述——栈3.1集合集合是一种聚集组织了其他对象的对象。集合可以分为两大类线性集合和非线性集合线性集合... 查看详情

《数据结构与面向对象程序设计》第六周学习总结

学号2019-2020-1《数据结构与面向对象程序设计》第六周学习总结教材学习内容总结多态引用可以在不同时间指向不同类型对象,即运行一致性的方法出现不一致的行为。使用父类声明的引用变量可以指向子类的对象,接口也可以... 查看详情

20172304《程序设计与数据结构》第八周学习总结(代码片段)

20172304《程序设计与数据结构》第八周学习总结教材学习内容总结本周主要学习的内容是堆。堆是二叉树的扩展什么是堆堆就是具有两个附加属性的一棵二叉树1.它是一棵完全树。2.对每一结点,他小于或等于其左孩子和右孩子(... 查看详情

20182310第六周学习总结

201823102019-2020-1《数据结构与面向对象程序设计》第六周学习总结教材学习内容总结1.利用继承实现多态性:当用类名声明了一个引用变量时,这个变量可以指向该类的任何一个对象,也可以引用通过继承与它所声明的类型有关的... 查看详情

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

20182314《程序设计与设计结构》第六周学习总结教材学习内容总结第九章多态:1、后绑定:很多情形下,方法调用和方法定义的绑定是在编译的时候完,但多态的引用,绑定必须到运行时才能确定。需要由调用时所指向的对象的... 查看详情

20172302《java软件结构与数据结构》第六周学习总结(代码片段)

...学习内容总结1.树的概述及基本概念(1)树是一种非线性数据结构,其中的元素被组织成了一个层次结构.(2)树由一个包含结点和边的集构成,其中元素被存储在这些结点中,边则将一个结点和另一个结点连接起来。每一结点... 查看详情

2016710101052016-2017-2《java程序设计》第六周学习心得

这周我们主要学习的是第六章的接口,lambda表达式和内部类,而这周我们主要学习的是接口,由于java不支持多继承,一个类只能有一个超类,为了克服单继承的缺点,我们使用了接口,接口名的命名规则与标识符的命名规则一... 查看详情

李晓菁201771010114《面向对象程序设计(java)》第六周学习总结(代码片段)

理论部分:第五章:继承1.继承用已有类来构建新类的一种机制。2..继承的特点:具有层次结构,子类继承了父类的域和方法。3.继承的优点:代码可重用性,父类的域和方法可用于子类,可以轻松定义子类,设计应用程序变得... 查看详情