算法—树

树结构是一种典型的非线性结构,非线性就意味着数据结构中至少拥有两个直接前驱或后继元素

概念

树是由 n(n>=0)个节点组成的有穷集合 D 与 D 上的关系集合 R 构成的集合,通常用 T 来表示,再此定义上,树满足以下三个条件

  • n=0 时,该节点集合为空,该树被称之为空树
  • 在任意非空树中,有且只有一个根节点 root
  • 当 n>1 时,除根节点外其余节点可以分为 m 个不相交的自己,每一个这样的子集本身又是一棵树,称为根节点的子树

树的定义是一个递归定义。

树的表示

树可以用树的形状或文氏图表示

节点的度

节点拥有的子树的数目称之为节点度,直观来说就是每个节点的直接子节点个数

树的度

树中各节点度的最大的值称之为树的度

分支节点

度不为 0 的节点称之为分支节点或普通节点,有的称之为非终端节点

节点的层次

从树的根节点开始,根节点为第1层,根节点的子节点是第2层,依次类推

树的深度

树中节点的最大层次称之书的高度或深度

森林

n(n>=0) 个不相交的树称之为森林

叶子节点

度为 0 的节点称之为叶子节点

特性

  • 非空树的节点总数等于树中所有节点的度之和再加 1 (1其实是根节点)
  • 深度为 k 的非空树第 i 层最多有 k^i-1 个节点 (证明?)
  • 深度为 h 的 k 叉树最多有
  • 具有 n 个节点的 k 叉树的最小深度

树的实践和应用

问题【1】

树和森林的转换

三月沙 wechat
扫描关注 wecatch 的公众号