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

教材学习内容概要


树是非线性结构,其元素组织为一个层次结构
树的度表示树种任意结点的最大子结点数
有m个元素的平衡n叉树的高度是log n底m
树的遍历有4种方法
进行层序遍历时可用队列来储存树中的元素使用数组实现二叉树时,位于位置n的元素的左孩子在(2n+1)的位置,其右孩子在(2*(n+1))的位置
树的基于数组存储实现方式可以占据数组中的连续位置,不管树是不是完全树
如何在一般二叉树中添加及删除元素,要取决于树的用途
使用决策树可以设计专家系统


  • 树(tree)是n( n≥0 )个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当 n>1 时,其与结点可分为m( m>0 )个互不相交的有限集 T1,T2,...,Tm,其中每个集合本身又是一棵树,并且称为根的子树(SubTree)。

结点分类


  • 结点拥有的子树数称为结点的度。度为0的结点称为叶结点(Leaf)或终端结点。除根结点外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。

结点间关系


  • 结点的子树的根称为该结点的孩子,相应地,该结点成为孩子的双亲。同一个双亲的孩子之间互称兄弟。结点的祖先是从根到该结点所经分支上的所有结点,反之,以某结点为根的子树的任一结点都称为该结点的子孙。

其他相关概念


  • 结点的层次(Level)从根开始定义起,根为第一层,根的孩子为第二层。双亲在同一层的结点互称为堂兄弟。树中结点的最大层次成为树的深度(Depth)或高度。

  • 若树中结点的各子树堪称从左到右是有次序的,不能互换的,则称该树为有序树,否则称为无序树。

  • 森林(Forest)是m( m≥0 )棵互不相交的树的集合。

  • 二叉树的结点度数至多为2

  • 已知先序序列和后序序列,无法唯一确定一棵二叉树(另外两种可以);只知三者中一种,也不行

比较线性结构和树结构


线性结构 树结构
第一个数据元素:无前驱 根结点:无双亲,唯一
最后一个数据元素:无后继 叶结点:无孩子,可以多个
中间元素:一个前驱,一个后继 中间元素:一个前驱,一个后继
中间元素:一个前驱,一个后继 中间元素:一个前驱,一个后继

二叉树


  • 二叉树(Binary Tree)是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。

  • 二叉树特点:
    1.每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。没有子树或者有一棵子树是可以的,最多有两棵子树。
    2.左子树和右子树是有顺序的,次序不能颠倒。
    3.即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

  • 二叉树具有五种基本形态:1.空二叉树;2.只有一个根结点;3.根结点只有左子树;4.根结点只有右子树;5.根结点既有左子树又有右子树。

特殊二叉树


斜树


  • 所有的结点都只有左子树的二叉树叫左斜树。所有的结点都是只有右子树的二叉树叫右斜树。这二者统称为斜树。斜树有明显特点,每一层都只有一个结点,结点的个数和二叉树的深度相同。斜树和线性表结构一样,线性表结构是树的一种特殊表现形式。

满二叉树


  • 在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。单是每个节点都存在左右子树,不能算是满n二叉树,还必须要所有的叶子结点都在同一层上,这样就做到了整棵树的平衡。所以,满二叉树的特点是:1.叶子只能出现在最下一层,出现在其他层就不能达到平衡;2.非叶子结点的度一定是2;3.在同样深度的二叉树中,满二叉树的结点最多,叶子数最多。

完全二叉树


  • 对一棵具有n个结点的二叉树 按层序编号 ,如果编号为i(1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这颗二叉树称为完全二叉树。

  • 完全二叉树的特性:
    (1)叶子结点只能出现在最下两层。
    (2)最下层的叶子一定集中在左部连续位置。
    (3)倒数第二层,若有叶子结点,一定都在右部连续位置。
    (4)如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况。
    (5)同样结点数的二叉树,完全二叉树的深度最小。

二叉树的性质


性质一:在二叉树的第i层上至多有 2^(i−1) 个结点(i≥1)。—–归纳法

性质二:深度为k的二叉树至多有 (2^k) −1 个结点(k≥1)。—–归纳法

性质三:对任何一棵二叉树T,如果其叶结点数为 n0,度为2的结点数为 n2,则 n0=n2+1。

设 n1 为度是1的结点数,那么T结点总数 n=n0+n1+n2 。换个角度,数数连接连线,因为根结点只有分支出去,没有分支进入,所以分支线总数为结点总数减去1,分支线总数为 n−1=n1+2n2 ,两个式子相减得到 n0=n2+1。
性质四:具有n个结点的完全二叉树的深度为 |log2底n|+1(其中|x|表示不大于x的最大整数)。

性质五:如果对一棵有n个结点的完全二叉树(深度为 |log2底n|+1)的结点按层序编号(从第1层到第 |log2底n|+1层,每层从左到右),对任一结点i(1≤i≤n)有:
1.如果 i=1,则结点i是二叉树的根,无双亲;如果 i>1,则其双亲是结点|i/2|。
2.如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i。
3.如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。

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

  • 问题1:课上测验第一题中问“有100个结点的完全二叉树的叶结点数是多少?” 按二叉树性质二,深度为k的二叉树至多有 2k−1 个结点,假设是满二叉树,则当k=7时最接近101,所以是7层,可计算前6层有63个结点,即第七层有100 - 63 =37个叶结点,但在看到完全二叉树与满二叉树的区别中写“完全二叉树最下层上的结点都集中在该层最左边的若干位置上”,又【倒数第二层,若有叶子结点,一定都在右部连续位置】,故认为最下层有且只能有左结点,倒数第二层有且只能有右结点,理解不了为什么“第六层有32-19=13个叶子节点”中的19是如何得出的,按道理第六层应该不含叶结点才对,因为都与第七层相连了。

  • 问题1解决方案:通过张之睿同学的解释,“完全二叉树最下层上的结点都集中在该层最左边的若干位置上”其实是指靠左排布,倒数第二层也是靠右排布,第七层的37个叶节点要占第六层19个节点(37/2=18余1,18个结点满度),所以减19,总共50个叶子结点。

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

  • 问题1:在实现书上代码时,BTNode类和LinkedBinaryTree类中有一个没出现过的类——ArrayIterator,java的包里找到,询问搭档也无果。

  • 问题1解决方案:娄老师找了三个版本的教材,但未能找到这个类,尚待解决。

代码托管

上周考试错题总结

本周结对学习情况

  • 20162311
  • 结对学习内容
    - 二叉树的性质
    - 课堂练习题

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

  • 这周学的树,与以往的线性结构不同,虽然对课堂上讲的性质与练习题,接受上没有问题,但课下对几种遍历的实现理解起来还是很困难,希望通过更多的查看相关博客和尝试编码,能够基本顺利完成下堂课的实验……(虽然还是害怕

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 58/ 1/1 10/10
第二周 8/18
第三周 134/ 3/4 12/ 30
第四周 2/6 12/42
第五&六周 750/ 6595 5/11 24/66
第七周 764/7068 7/13 18/84
  • 计划学习时间: 18小时

  • 实际学习时间: 18小时

  • 改进情况:多思考,多总结

参考资料

  • 《Java程序设计与数据结构教程(第二版)》

  • 《Java程序设计与数据结构教程(第二版)》学习指导
  • 树PPT
  • CSDN博客

转载于:https://www.cnblogs.com/JXY6996/p/7698499.html

20162325 金立清 S2 W7 C16相关推荐

  1. 20162325 金立清 S2 W8 C17

    20162325 2017-2018-2 <程序设计与数据结构>第8周学习总结 教材学习内容概要 二叉查找树是一棵二叉树,对于其中的每个结点,左子树上的元素小于父结点的值,而右子树上的元素 ...

  2. 20162325金立清第三周作业

    20162325 2016-2017-2 <程序设计与数据结构>第3周学习总结 教材学习内容总结 学会如何创建对象 认识String类.类库 掌握枚举类.包装类 教材学习中的问题和解决过程 ...

  3. 结对编程-马尔科夫链作业成绩

    结对编程-马尔科夫链作业成绩 作业博客:http://www.cnblogs.com/vertextao/p/6881960.html 问题 本次作业仅有三位同学按时提交,两位同学延迟提交,出人意料, ...

  4. 2017-2018-1 我爱学Java 第一周 作业

    构建之法 成员及分工 内容简介 作者简介 分章学习及问题 第一章 概论 第二章 个人技术和流程 第三章 软件工程师的成长 第四章 两人合作 第五章 团队和流程 第六章 敏捷流程 第七章 实战中的软件工 ...

  5. Scrum 冲刺 第一日

    Scrum 冲刺 第一日 站立式会议 燃尽图 Alpha 阶段认领任务 明日任务安排 项目预期任务量 成员贡献值计算规则 今日贡献量 参考资料 站立式会议 返回目录 燃尽图 返回目录 Alpha 阶段 ...

  6. 在线生成大全(这里真的什么都有)

    粉丝身份证:http://id.igogo8.com/ 制作印章:http://www.makepic.com/print.php 邮址图片生成:http://www.makepic.com/emai ...

  7. php 图片印章_在线生成实用又方便 (图片印章)

    1.Eoool在线制作LOGO.Banner.Email.Rss.签名.头像,但模板比较少,格式也比较少.- T2 W* p5 T0 D: R# M/ } http://www.eoool.com & ...

  8. 2017-2018-1 Java演绎法 小组会议及交互汇总

    第一周会议 今天我们小组开展了第一次团队例会活动.我们小组将<构建之法>分为了六个部分并由六位成员先分别学习并向组长上传学习收获,这次的活动内容便是 交流前两周小组成员学习阅读<构建 ...

  9. 【Alpha版本】冲刺阶段 - Day7 - 靠泊

    Alpha:指集成了主要功能的第一个试用版本.在这个版本中有些小功能并未实现.事实上很多软件的 Alpha 版本只是在内部使用.给外部用户使用的 Alpha 版本会起一个比较美妙的名字,例如,技术预览 ...

最新文章

  1. struts2笔记01-环境搭建
  2. nodejs回调函数理解
  3. 统计学习三要素 模型+策略+算法
  4. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
  5. 阿里技术专家推荐的20本书,免费送!
  6. nyoj-257-郁闷的C小加(一 )中缀式变后缀式
  7. pythoncsv文件的操作_python操作CSV文件
  8. 易优CMS精美简洁作文范文网站模板源码
  9. 在IOC中装配Bean
  10. 如何禁止TextBox的记忆功能
  11. 如何在 Mac 上的“通知中心”中添加和自定小组件?
  12. 利用反射和元数据编写的通用更新和通用查询
  13. TFS2010中文版下载
  14. 一名优秀项目经理需具备的五种基本素质及八大管理技能
  15. java实习第一天日志
  16. 计算机教学特点怎么写,中学计算机教学特点.doc
  17. IIS 部署php程序
  18. Windows桌面应用程序(1-2-4-4th) 您的第一个Direct2D程序
  19. 2022年安全员-A证考试题库及安全员-A证免费试题
  20. c++ abs 取绝对值函数

热门文章

  1. python-try-except介绍
  2. vue3.0计算属性
  3. [附源码]计算机毕业设计Python现代诗歌交流平台(程序+源码+LW文档)
  4. 创建服务的时候发生了Renamed existing log file错误
  5. 奔腾64位计算机,电脑Intel奔腾e6700 cpu参数能用64位win7系统吗
  6. AI in WAF︱腾讯云网站管家 WAF:爬虫 Bot 程序管理方案
  7. 树莓派3B摄像头的详细使用教程(拍照+录像+监控)
  8. CAD软件标注样式的设置
  9. Android 输入法
  10. 串口命令调试的那些骚操作