高级数据结构和算法1:树的基本概念

1. 什么是树?

树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:
(1)有且仅有一个特定的称为根(root)的结点。
(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,....,Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)

高级数据结构和算法1:树的基本概念_第1张图片

2. 树的构成

1.1 节点

  • 分类
节点分类 特点 说明
根(root) 没有父节点只有子节点的节点
叶子(leaf)/终端节点 没有子节点或者子节点是空的节点 叶子结点度为0
分支节点/非终端节点 分支节点包含根节点
  • 关系
    • 双亲节点或父节点(Parent):若一个节点含有子节点,则这个节点称为其子节点的父节点。
    • 孩子节点或子节点(Child):一个节点含有的子树的根节点称为该节点的子节点。
    • 兄弟节点(Sibling):具有相同父节点的节点互称为兄弟节点。
    • 节点的祖先:从根到该节点所经分支上的所有节点;
    • 节点的子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
高级数据结构和算法1:树的基本概念_第2张图片
高级数据结构和算法1:树的基本概念_第3张图片

1.2 度

  • 节点的度数:节点孩子的个数
  • 树的度:树中节点的度最大值。

1.3 层次

  • 层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;


    高级数据结构和算法1:树的基本概念_第4张图片

    高级数据结构和算法1:树的基本概念_第5张图片

    高级数据结构和算法1:树的基本概念_第6张图片

1.4 深度与高度

维基百科

  • 节点的高度:节点到最远叶子节点的最长路径上边的数量。叶子节点高度为0
  • 节点的深度:节点到根节点的路径上边的数量。所有根节点深度为0
  • 树的高度:树的高度等于根节点的高度,等于最远叶子节点的深度。
  • 树的深度:树的深度等于树的高度。
  • 树的宽度:两个最长路径的叶子节点之间节点数。
高级数据结构和算法1:树的基本概念_第7张图片

Leetcode

  • 树的深度:根节点到最远叶子节点之间最长路径上节点的数量。
  • 树的高度:根节点和最远叶子节点之间最长路径上边的数量。
    树的深度与树的高度是树中节点的最大层次
  • 111. 二叉树的最小深度
  • 104. 二叉树的最大深度
  • 559. N叉树的最大深度

3. 树的分类

树按照子节点的数量分为二叉树和多叉树。

  • 二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),每个节点最多有2个子节点,分别称为根结点的左子树和右子树。
  • 多叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空树)。每个节点有多个子节点。
高级数据结构和算法1:树的基本概念_第8张图片
高级数据结构和算法1:树的基本概念_第9张图片
No. 分类 经典分类
1 二叉树 平衡二叉树、二叉搜索树、AVL、堆、红黑树
2 多叉树 2-3树、B树、B+树

树按照子树是否有序分为有序树和无序树。

  • 有序树:节点各子树从左到右有次序(不能互换)。
  • 无序树:节点各子树从左到右无次序(能互换)。

二叉树是最简单,最基础的树结构。

4. 特殊的树

  • 满二叉树(Full Binary Tree):二叉树中的每个结点恰好有两个孩子结点且所有叶子结点都在同一层。


    高级数据结构和算法1:树的基本概念_第10张图片
  • 完全二叉树(Complete Binary Tree): 每层结点都完全填满,在最后一层上如果不是满的,则只缺少右边的若干结点。

深度为,有个结点的二叉树,当且仅当其每一个结点都与深度为的满二叉树中编号从到的结点一一对应,该二叉树称为完全二叉树。

高级数据结构和算法1:树的基本概念_第11张图片

不同的书籍对满二叉树和完全二叉树定义不一样。
《算法导论》第3版

  • 满二叉树:每个节点是叶节点或者度为2.
  • 完全二叉树:所有叶节点深度相同,且所有内部节点度为2. (树的节点总数达到最大)

5. 二叉树的性质

5.1 通用性质

  1. 在非空二叉树上,第层至多有个结点。
  2. 深度为的二叉树至多有个结点;
  3. 对任何一个二叉树,若其叶子结点数为,度为的节点数为,则;

5.2 满二叉树的性质

深度为的满二叉树且有个结点。

5.3 完全二叉树的性质

  1. 个结点的完全二叉树的深度,这里这个符号表示小于等于的整数;
  2. 若对一棵有个结点的完全二叉树(深度为)的结点按层(从第层到第层)序自左至右进行编号,则对于编号为()的结点:
    1. 如果,则结点是二叉树的根,无双亲结点;如果,则其双亲结点编号是。
    2. 如果:则结点为叶子结点,无左孩子;否则,其左孩子结点编号是。
    3. 如果:则结点无右孩子;否则,其右孩子结点编号是。

你可能感兴趣的:(高级数据结构和算法1:树的基本概念)