热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2018-2019学年第六周《Java数据结构与算法》学习总结

本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。
### 第六周学习总结:非线性数据结构——树

#### 概述
本周我们深入探讨了第十章的内容,即非线性集合与数据结构——树。树作为一种重要的数据结构,在计算机科学中有着广泛的应用。本章节主要讨论了树的定义、实现方式及实际应用场景。

#### 树的基本概念
树是一种非线性的层次结构,由结点(Node)和边(Edge)组成。以下是树的一些关键术语:

- **根(Root)**:树的顶层唯一结点。
- **孩子(Children)**:位于较低层的结点是上一层结点的孩子。
- **兄弟(Siblings)**:同一双亲的孩子互为兄弟。
- **叶子(Leaf)**:没有孩子的结点。
- **内部结点(Internal Node)**:至少有一个孩子的非根节点。
- **祖先(Ancestor)**:从某一特定结点到根结点路径上的所有结点。
- **子孙(Descendant)**:从根结点到某一特定结点路径上的所有结点。
- **路径长度(Path Length)**:从根结点到该结点的边数。
- **高度(Height)**:从根到最远叶子结点的路径长度。

#### 树的分类
树可以根据其度(Order)进行分类,也可以根据是否平衡进行分类:

- **广义树**:无限制的孩子数目。
- **n元树**:每个结点最多有n个孩子。
- **二叉树**:每个结点最多有两个孩子。
- **平衡树**:所有叶子结点位于同一层或相差不超过一层。
- **完全树**:平衡且底层叶子位于左边。
- **满树**:所有叶子在同一层,每个内部结点有n个孩子。

#### 树的实现方法
树可以通过链式结构或数组实现:

- **链式结构**:使用指针连接各个结点,适合动态变化的树结构。
- **数组实现**:将树元素按特定规则存储在数组中,适用于静态或相对稳定的树结构。

#### 遍历树的方法
遍历树有四种基本方法:

- **前序遍历(Preorder Traversal)**:先访问根结点,再访问左子树,最后访问右子树。
- **中序遍历(Inorder Traversal)**:先访问左子树,再访问根结点,最后访问右子树。
- **后序遍历(Postorder Traversal)**:先访问左子树,再访问右子树,最后访问根结点。
- **层序遍历(Level-order Traversal)**:按层次从上到下逐层访问。

#### 二叉树的应用
表达式树是一种典型的二叉树应用,用于计算后缀表达式。链式结构实现优于数组结构实现,因为链式结构在组合新树时复杂度更低。

#### 学习中的问题及解决

- **问题1**:理解树的数组实现中的模拟链接策略。通过老师的讲解,我明白了这种策略是通过连续分配数组位置来存储树元素,而不是基于树的结构定位。
- **问题2**:理解`ExpressionTreeOp`类中的`termType`变量的作用。这个变量用于区分操作符和操作数,在程序中起到中间值的作用。

#### 代码实现中的挑战

- **问题1**:实现`toString`方法以输出树结构。尝试使用迭代器但未成功,最终未能找到合适的解决方案。
- **问题2**:正确计算树的高度。最初使用了错误的循环逻辑,经过讨论后改为递归查找最远路径。
- **问题3**:运行`BackPainAnalyzer`类时文件找不到。通过添加路径解决了这个问题。

#### 测试活动错题改正

- **问题1**:Java Collections API中索引列表的实现数量。答案选C,但原因尚不明确。
- **问题2**:接口引用可以指向任何实现了该接口的对象。答案选A,正确。

#### 总结
非线性结构的学习标志着我们对更复杂数据结构的理解进一步加深。尽管树结构中仍然存在链表和数组的身影,但我们需要继续努力才能真正融会贯通。

#### 参考资料
- [Java软件结构与数据结构](第四版)
- JavaAPI文档中List的解释
- Java非线性数据结构 树的深刻研究
- Java数据结构-树及树的存储结构
推荐阅读
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • MATLAB中的类别数组:存储和操作有限类别的数据
    类别数组(categorical array)是MATLAB中用于存储有限类别数据的一种特殊数组类型。它不仅提供对非数值数据的高效存储和操作,还保留了原有类别的名称,使数据处理更加直观便捷。此外,类别数组可以与表格(table)数据类型结合使用,以实现更复杂的数据分析。 ... [详细]
author-avatar
Eva绫波_772
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有