树形结构是数据元素(结点)之间有分治,并且具有层次关系的结构,可用于表示数据元素之间存在的一对多关系。

树(Tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由 n(n>0) 个有限节点组成一个具有层次关系的集合。它具有以下的特点:

  • 每个节点都只有有限个子节点或无子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且只有一个父节点;
  • 除了根节点外,每个子节点可以分为多个不相交的子树;
  • 树里面没有环路(cycle)

基本术语

基本术语说明
树结点(Tree Node)树中一个独立单元
树根(Root)树中唯一没有前驱的结点
结点的度(Node Degree)一个节点含有的子树的个数称为该节点的度
树的度(Tree Degree)一棵树中,最大的节点度称为树的度
叶节点(Leaf)度为零的节点
非终端节点或分支节点度不为零的节点
父节点若一个节点含有子节点,则这个节点称为其子节点的父节点
子节点一个节点含有的子树的根节点称为该节点的子节点
兄弟节点具有相同父节点的节点互称为兄弟节点
节点的层次(Level)从根开始定义起,根为第一层,根的子节点为第二层,以此类推
深度(Depth)对于任意节点 nn 的深度为从根到 n 的唯一路径长,根的深度为 0
高度对于任意节点 nn 的高度为从 n 到一片树叶的最长路径长,所有树叶的高度为 0
堂兄弟节点父节点在同层的节点互为堂兄弟
节点的祖先从根到该节点所经分支上的所有节点
子孙以某节点为根的子树中任一节点都称为该节点的子孙
森林(Forest)m(m>=0) 棵互不相交的树的集合称为森林

树的种类

  • 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树
  • 有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树
    • 二叉树 Binary Tree:每个节点最多含有两个子树的树
      • 特殊类型
        • 完全二叉树:对于一棵二叉树,假设其深度为 d(d > 1)。除了第 d 层外,其他各层的节点树目均已达最大值,且第 d 层所有节点从左向右连续地紧密排列
        • 满二叉树:所有叶节点都在最底层的完全二叉树
      • 二叉查找树 BST(二叉搜索树)
      • 平衡二叉树:当且仅当任何节点的两棵子树的高度差不大于 1 的二叉树
        • AVL 树
        • 红黑树
        • 伸展树
        • 树堆 Treap
      • 线索二叉树
    • 堆 Heap
      • 二叉堆
        • 最大堆
        • 最小堆
      • 二项堆
      • 斐波那契堆
      • 左偏堆
    • B 树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多于两个子树
      • B+ 树
      • B* 树
      • 2-3 树
    • 字典树 Trie Tree
      • 后缀树
      • AC 自动机

线性结构与树结构的对比

线性结构树结构
第一个数据元素:无前驱根节点:无双亲,唯一
最后一个数据元素:无后继叶节点:无孩子,可以多个
中间元素:一个前驱一个后继中间节点:一个双亲多个孩子