首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
export
javascript
instance
input
httpclient
cSharp
char
regex
object
schema
process
tags
hashtable
timestamp
bitmap
uml
search
md5
require
nodejs
erlang
io
grid
iostream
header
flutter
testing
hook
format
dagger
java
filter
future
version
express
hashset
heatmap
vba
c语言
text
string
const
foreach
bit
timezone
less
httprequest
bytecode
substring
heap
command
config
stream
dockerfile
python
emoji
eval
integer
js
expression
spring
chat
tree
cmd
audio
web3
loops
install
request
lua
yaml
include
php
datetime
dll
php7
import
sum
default
当前位置:
开发笔记
>
编程语言
> 正文
2018-2019学年第六周《Java数据结构与算法》学习总结
作者:Eva绫波_772 | 来源:互联网 | 2024-12-22 16:43
本文总结了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数据结构-树及树的存储结构
java
编程
io
sum
text
tree
int
数组
rsa
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
io
紫荆花之恋:动态树上的小精灵友谊问题
本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ...
[详细]
蜡笔小新 2024-12-22 14:36:54
io
JSOI2010 蔬菜庆典:树结构中的无限大权值问题
本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ...
[详细]
蜡笔小新 2024-12-22 18:57:48
io
深入解析Java虚拟机(JVM)架构与原理
本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ...
[详细]
蜡笔小新 2024-12-21 23:50:40
io
优化C++项目中的JSON处理:选择高性能的RapidJSON库
在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ...
[详细]
蜡笔小新 2024-12-21 18:13:59
io
CSS高级技巧:动态高亮当前页面导航
本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ...
[详细]
蜡笔小新 2024-12-21 17:42:25
io
社交网络中的级联行为
社交网络中的级联行为 ...
[详细]
蜡笔小新 2024-12-22 16:47:55
io
Java 实现二维极点算法
本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ...
[详细]
蜡笔小新 2024-12-22 15:52:24
io
Nginx 反向代理与负载均衡实验
本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ...
[详细]
蜡笔小新 2024-12-22 15:15:48
io
深入解析Java枚举及其高级特性
本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ...
[详细]
蜡笔小新 2024-12-22 14:46:52
header
使用Fetch进行HTTP请求的基本示例
本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ...
[详细]
蜡笔小新 2024-12-22 12:55:37
header
PHP 实现多级树形结构:构建无限层级分类系统
在众多管理系统中,如菜单、分类和部门等模块,通常需要处理层级结构。为了高效管理和展示这些层级数据,本文将介绍如何使用 PHP 实现多级树形结构,并提供代码示例以帮助开发者轻松实现无限分级。 ...
[详细]
蜡笔小新 2024-12-22 12:29:28
format
F# Interactive 中的数据格式化技巧:使用 AddPrinter 和 AddPrintTransformer 自定义输出
本文探讨了如何在 F# Interactive (FSI) 中通过 AddPrinter 和 AddPrintTransformer 方法自定义类型(尤其是集合类型)的输出格式,提供了详细的指南和示例代码。 ...
[详细]
蜡笔小新 2024-12-22 12:09:23
format
Java - 在ArrayList中插入多个不同数组的方法
本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ...
[详细]
蜡笔小新 2024-12-22 11:35:44
io
深入解析SpringMVC核心组件:DispatcherServlet的工作原理
本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ...
[详细]
蜡笔小新 2024-12-21 18:50:52
io
深入解析动态代理模式:23种设计模式之三
在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ...
[详细]
蜡笔小新 2024-12-21 15:46:52
Eva绫波_772
这个家伙很懒,什么也没留下!
Tags | 热门标签
export
javascript
instance
input
httpclient
cSharp
char
regex
object
schema
process
tags
hashtable
timestamp
bitmap
uml
search
md5
require
nodejs
erlang
io
grid
iostream
header
flutter
testing
hook
format
dagger
RankList | 热门文章
1
Android SDK在线更新镜像服务器大全
2
分享五种Android常用布局方式
3
Android TextView显示html样式的文字
4
一看就喜欢的loading动画效果Android分析实现
5
从源码分析Android的Volley库的工作流程
6
Android应用开发中Fragment存储功能的基本用法
7
深入解析Android App的LayoutInflate布局
8
在Visual Studio上构建C++的GUI框架wxWidgets的开发环境
9
读写Android中assets目录下的文件的方法详解
10
Android实现软件列表的点击启动另外一个程序功能【附demo源码下载】
11
Android Dialog对话框用法实例详解
12
Android中Java根据文件头获取文件类型的方法
13
Android中BaseAdapter用法示例
14
Android实现使用流媒体播放远程mp3文件的方法
15
Android编程基础之简单Button事件响应综合提示控件Toast应用示例
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有