2018-2019-20172321 《Java软件结构与数据结构》第六周学习总结
2018-2019-20172321 《Java软件结构与数据结构》第六周学习总结
教材学习内容总结
第10章 树
10.1概述

树由一个包含结点和边的集构成,其中的元素被储存在这些结点中,边则将一个结点和另一个结点连接起来。
一棵树只有一个根节点。
树是一种非线性结构,其中的元素被组织成一个层次的结构。
10.1.1树的分类
- 每一结点限制为不超过n个孩子的树称为一颗n元树。结点最多具有两个的树称为二叉树。
- 平衡树:如果树的所有叶子都位于同一层或者至少是彼此相差不超过一个层,就称之为是平衡的。

- 完全树:如果某树是平衡的,且底层所有叶子都位于shu的左边,则认为该树是完全的。

- 满树:如果一颗n元树的所有叶子都位于同一层且每一结点要么是一片叶子要么正好具有n个孩子,则称次树是满的。

10.2实现树的策略
- 10.2.1树的数组实现之计算策略
- 左孩子存储在(2n+1)处,右孩子存储在(2(n+1))处
- 左孩子存储在(2n+1)处,右孩子存储在(2(n+1))处
- 10.2.2树的数组实现之计算策略
- 10.2.3树的分析
- 一般而言,一棵含有m个元素的平衡n元树具有的高度为lognm
10.3树的遍历
- 前序遍历:从根节点开始,访问每一结点及其孩子
- 中序遍历从根节点开始,访问结点的左孩子,然后是该结点,再然后是任何剩余结点
- 后序遍历:从根节点开始,访问结点的孩子,然后是该结点
- 层序遍历:从根节点开始,访问每一层的所有结点,一次一层

- 10.3.1前序遍历
- A——B——D——E——C——F
- 10.3.2中序遍历
- D——B——E——A——F——C
- 10.3.3后序遍历
- D——E——B——F——C——A
- 10.3.4层序遍历
- A——B——C——D——E——F
10.4二叉树
- 二叉树的操作
public interface BinaryTreeADT<T>
{
//返回指向二叉树的引用
public T getRootElement();
//判断该树是否为空
public boolean isEmpty();
//判断树中的元素数目
public int size();
//判断目标是否在该树中
public boolean contains(T targetElement);
//如果找到指定元素,则返回指向其的引用
public T find(T targetElement);
//返回树的字符串表示
public String toString();
//返回一个迭代器
public Iterator<T> iterator();
//为数的中序遍历返回一个迭代器
public Iterator<T> iteratorInOrder();
//为数的前序遍历返回一个迭代器
public Iterator<T> iteratorPreOrder();
//为数的后序遍历返回一个迭代器
public Iterator<T> iteratorPostOrder();
//为数的层序遍历返回一个迭代器
public Iterator<T> iteratorLevelOrder();
}
10.5使用二叉树:表达式树
- 算法思想:
- 依次读取字符。
- 如果该符号是操作数,创建操作数结点并且入栈。
- 如果该符号为操作符,把栈顶T1、T2相继出栈,创建操作符结点,操作符结点的左右孩子分别为T1、T2,最后把操作符结点入栈。
10.7用链表实现二叉树
线性结构和非线性结构
- 线性结构是一个有序数据元素的集合。 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
常用的线性结构有:线性表,栈,队列,双队列,数组,串。 - 非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图。(其中多维数组是由多个一维数组组成的,所以不再是线性结构)
教材学习中的问题和解决过程
- 问题1:问题2:满二叉树和完全二叉树,概念太扯了吧,不懂在说啥
- 问题1解决方案:听王老师讲课大概有点感觉。
- 满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
- 完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
- 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
- 问题2对于树的度,节点的度,树的高度,深度以及节点的层次概念不清楚
- 问题2解决方案:
- 节点的度分为0,1,2.及表示节点所含的分支个数,上图中3 的度是 2,10 的度是 1。
- 树的度分为0,1,2即表示一棵树中最大节点的度,即哪个节点的子节点最多,它的度就是树的度,上图中树的度为 2。
- 树的高度,即从叶子节点开始,自底向上增加。
- 树的深度与树的高度相反,从根节点向下增加。比如上图中的 6 ,高度是 2 ,深度是 3。

代码调试中的问题和解决过程
第一次我写了测试,出现了这个恐怖的东西,但是我马上意识到了肯定是我Alt+Enter的时候点到了没有修改过的例题那个类里面,那里的所有方法都是return null或者0的

但是再修改运行之后又是这样

之后我自己改了哪些我都不知道了,然后居然就可以了???可以了??以了?了。
代码托管

上周考试错题总结
没有测试
结对及互评
- [20172324曾程](http://www.cnblogs.com/amberR/p/9670328.html)
- 博客中值得学习的或问题:
- 内容详略得当;
- 代码调试环节比较详细;
- 基于评分标准,我给本博客打分:14分。得分情况如下:
- 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程, 加4分
- 代码调试中的问题和解决过程, 加4分
- 本周有效代码超过300分行,加2分
- 其他加分,加2分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 |
| 第一周 | 0/0 | 1/1 | 8/8 |
| 第二周 | 671/671 | 1/2 | 17/25 |
| 第三周 | 345/1016 | 1/3 | 15/40 |
| 第四周 | 405/1421 | 2/5 | 23/63 |
| 第五周 | 1202/2623 | 1/5 | 20/83 |
| 第六周 | 1741/4364 | 1/6 | 20/103 |
参考资料
- 《Java软件结构与数据结构》第四版
- 完全树-学术百科-知网空间
- 完美二叉树, 完全二叉树和完满二叉树
2018-2019-20172321 《Java软件结构与数据结构》第六周学习总结的更多相关文章
- 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结
20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...
- 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结
20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...
- 20172328 2018-2019《Java软件结构与数据结构》第九周学习总结
20172328 2018-2019<Java软件结构与数据结构>第九周学习总结 概述 Generalization 本周学习了无向图.有向图.带权图.常用的图算法.图的实现策略. 教材学 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...
- 2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结
2018-2019-20172321 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 第15章 图 无向图 图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: ...
- 《JAVA软件结构与数据结构》第一周学习总结
学号 20172326 <JAVA软件结构与数据结构>第一周学习总结 教材学习内容总结 软件质量的几大特性 增长函数与大O记法 大O记法用来表示表示增长函数,从而来表示算法的复杂度 算法的 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第二周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 本周内容主要为书第三章和第四章的内容: 第三章(以数组来替代栈的作用) 集合(聚集 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第九周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 本周内容主要为书第十五章内容: 图(结点和结点之间的连接构成) 顶点:结点 边:结 ...
- 20172329 2018-2019《Java软件结构与数据结构》第一周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第一周学习总结 在这学期就已经大二了,也已经步入了学习专业课的核心时间,在这个阶段,我们应该了解自己的学习情况,针对自己 ...
随机推荐
- 0CO_PC_ACT_10 不能提取NV类别的数据
今天用 BW 标准数据源 0CO_PC_ACT_10 提取数据时,发现物料有一项数据[没有被分摊]无法取到. 根据SAP的解释,此项不在后台存数,通过前台动态生成. For the virtual c ...
- Mac开发中遇到的一些小问题解析
通过mac开发的过程中,有一些小问题出现,列如下,后续会持续增加: 1. 命令行清空废纸篓(jar包太多,倾倒废纸篓太慢) sudo rm -rfv ~/.Trash /Volumes/*/.Tras ...
- C语言常用知识点
C语言条件预处理命令 /* 格式: #ifdef 标识符 程序1 #else 程序2 #endif 标识符已经定义时,程序段1才参加编译 应用:如调试版本,发行版本,便于调试 */ #include ...
- 最新的Veil3.0的安装和使用
首先安装 ┌─[root@sch01ar]─[~] └──╼ #cd /sch01ar/Veil/ ┌─[root@sch01ar]─[/sch01ar/Veil] └──╼ #cd setup/ ┌ ...
- 20155217 2016-2017-2 《Java程序设计》第9周学习总结
20155217 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作 ...
- 20155327 2017-2018-2 《Java程序设计》第9周学习总结
20155327 2017-2018-2 <Java程序设计>第9周学习总结 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对 ...
- 【转载】COM 组件设计与应用(十)——IDispatch 接口 for VC.NET
原文:http://vckbase.com/index.php/wv/1225.html 一.前言 终于写到了第十回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用 ...
- 2_C语言中的数据类型 (八)运算符
1 运算符表达式和语句 1.1 基本运算符 1.1.1 = 数据对象:泛指数据在内存的存储区域 左值:表示可以被更改的数据对象 右值:能赋给左值的量 1 ...
- Java中getConstructors()、getDeclaredConstructors()、getConstructor(Class<?>... parameterType)、getDeclaredConstructor(Class<?>... parameterType)的区别
区别一 在方法名末尾有s的是返回一个数组,没有s的是返回单个构造器. 区别二 在方法名中加Declared的是返回所有的构造方法,不加Declared的只返回public访问权限的构造器 区别三 有参 ...
- 【SoDiaoEditor电子病历编辑器更新啦】--谨以献给那些还在医疗行业奋斗的小伙伴们
为什么推荐的人这么少~~~~ 更新(2017-4-18): 截止目前已知的已有2个三甲医院在使用该编辑器,容我内心澎湃以下,O(∩_∩)O哈哈~ 先放github地址:https://gith ...