大数据知识体系
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
  • 数据结构与算法概述
  • 线性表

    • 线性表 - 基础概念
    • 线性表 - 顺序表
    • 线性表 - 链表
    • 线性表 - 单链表
    • 线性表 - 单向循环链表
    • 线性表 - 双向链表
    • 线性表 - 栈
    • 线性表 - 队列
  • 树

    • 树 - 基础概念
      • 概念
      • 树的存储结构
        • 双亲表示法
        • 孩子表示法
        • 孩子兄弟表示法
    • 树 - 二叉树基础
    • 树 - 二叉树建立
    • 树 - 二叉树遍历
    • 树 - 树的常见操作
    • 树 - 线索二叉树
    • 树 - 哈夫曼树
    • 树 - 二叉排序树
    • 树 - 平衡二叉树(AVL树)
    • 树 - 红黑树
    • 树 - B树
    • 树 - B+树
    • 树 - B*树
  • 图

    • 图 - 基础概念
    • 图 - 存储方式
    • 图 - 图遍历
    • 图 - 最小生成树
    • 图 - 最短路径
  • 其它数据结构

    • 稀疏数组
    • 哈希表
  • 排序算法

    • 冒泡排序
    • 选择排序
    • 插入排序
    • 希尔排序
    • 基数排序
    • 归并排序
    • 快速排序
    • 堆排序
  • 查找算法

    • 顺序查找
    • 二分查找
    • 插值查找
    • 斐波那契查找
  • 其它算法

  • 数据结构与算法
  • 树
Will
2022-03-26
目录

树 - 基础概念

# 概念

树(Tree)是 n(n ≥ 0)个结点的有限集。n = 0 时称为空树。在任意一棵非空树中:

  1. 有且只有一个特定的称为根(Root)的结点;
  2. 当 n > 1 时,其余结点可分为 m(m > 0)个互不相交的有限集 T1、T2、......、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。

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

结点的子树的根称为该结点的孩子(Child),该结点称为孩子结点的双亲(Parent)。同一个双亲的孩子之间互称兄弟(Sibling)。结点的祖先是从根到该结点所经分支上的所有结点,如 D、B、A 都是 H 的祖先。以某结点为根的子树中任一结点都称为该结点的子孙,如 B 的子孙有 D、G、H、I。

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

如果树中结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称为无序树。

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

# 树的存储结构

# 双亲表示法

在每个结点中,附设一个指示器指示其双亲结点到链表中的位置。也就是说每个结点除了知道自己,还知道自己的双亲在哪里。

# 孩子表示法

每个结点有多个指针域,其中每个指针指向一棵子树的根结点,这种表示法叫做多重链表示法。但是由于每个结点的孩子个数不同,可以设计两种方案。

方案一:

指针域的个数就等于树的度。其中 data 是数据域,child1 到 childd 都是指针域。

但是这种方法对于树中各个结点的度相差很大时,会造成空间浪费,因为有很多结点的指针域都是空的。

方案二:

每个结点的指针域的个数就等于该结点的度,专门取一个位置来存储结点指针域的个数。

这种方式克服了浪费空间的缺点,但是由于各个结点的链表是不同的结构,加上要维护结点的度,所以会带来更加复杂的计算。

# 孩子兄弟表示法

任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右边的兄弟如果存在也是唯一的。因此,设置两个指针分别指向该结点的第一个孩子和其右兄弟。这种表示法可以称为孩子兄弟表示法。

上次更新: 2023/11/01, 03:11:44

← 线性表 - 队列 树 - 二叉树基础→

Theme by Vdoing | Copyright © 2022-2023 Will 蜀ICP备2022002285号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式