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

数据结构树树的基本介绍

数据结
数据结构 - 树 - 树的基本介绍

树的定义

是由 \(n\) 个结点构成的有限集合,在任意一棵非空树中:

  • 有且仅有一个称为根 root 的结点。

  • \(n>1\) 时,其余结点可分为若干个互不相交的集合,且这些集合中的每一个集合本身又是一棵树,称为根的子树

(1) 数据对象

数据对象 D 是具有相同特性的数据元素的集合。

(2) 数据关系

D 为空集,则称为空树。否则:

  • D 中存在唯一称为的数据元素;

  • \(n>1\) 时,其余结点可分为 \(m(m>0)\) 个互不相交的有限集 \(T_1\)\(T_2\)\(\cdots\)\(T_m\),其中每一棵子集本身又是一棵树,称为根的子树。

例子

对于一棵树 \(T=\{A,B,C,D,E,F,G,H,I,J\}\)

\(A\) 是根,其余结点划分为三个互不相交的集合:

\[T_1 = \{B,E,F\}, \quad T_2 = \{C,G\}, \quad T_3 = \{D,H,I,J\} \]

每一个集合又都是一棵树,它们是根 \(A\) 的子树。对于 \(T_1\)\(B\) 是根,其余结点又可以划分为两个互不相交的集合。

\[T_{11} = \{E\}, \quad T_{12} = \{F\} \]

\(T_{11}\)\(T_{12}\)\(B\) 的子树。

其逻辑结构可以表示为下图:

从逻辑结构上看

  • 树中只有根结点没有前驱;

  • 除根外,其余结点有且仅有一个前驱;

  • 树中的结点,可以有零个或多个后继;

  • 除根之外的其他结点,都存在唯一一条从根到该结点的路径。

  • 树是一种分支结构。

树的基本术语

结点:数据元素 \(+\) 若干指向子树的分支。

结点的度:分支的个数。

树的度:树中所有结点的度的最大值。

叶子结点:度为零的结点。

分支结点:度大于零的结点。

一般的树可能有隐性的序关系。

  • 有序树:子树之间有明确的次序关系。

  • 无序树:子树之间没有顺序要求。

(从根到结点的)路径:由从根到该结点所经过的分支和结点构成。

对结点进行一些分类上的说明。

孩子结点、子孙结点

兄弟节点、堂兄弟

双亲结点、祖先节点

结点的层次:假设根节点的层次为 \(1\),在第 \(k\) 层结点的子树的根结点,在第 \(k+1\) 层。

树的深度:树中叶子结点所在的最大层次。

森林\(m \,(m \geqslant 0)\) 棵互不相交的树的集合。

则任何一棵非空树都是一个二元组

\[\text{Tree}=\{\text{root}, \text{F}\} \]

其中,\(\text{root}\) 称为根结点,\(\text{F}\) 称为子树森林。


推荐阅读
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 深入理解线程、进程、多线程、线程池
    本文以QT的方式来走进线程池的应用、线程、进程、线程池、线程锁、互斥量、信号量、线程同步等的详解,一文让你小白变大神!为什么要使用多线程、线程锁、互斥量、信号量?为什么需要线程 ... [详细]
  • Flutter 布局(四) Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth详解
    本文主要介绍Flutter布局中的Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth四种控件,详细介绍了其布局 ... [详细]
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
  • 流程控制之分支结构
    一. 什么是流程控制流程控制是程序代码执行的顺序。二. 事物执行流程1)顺序结构从上往下依次执行,我们之前所编写的代码都属于该结构2)分支结构事物的 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
author-avatar
bng7541071
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有