树的定义

树(Tree):n(n ≥ 0)个结点构成的有限集合。

  • 当n = 0 时,称为空树。
  • 对于任一颗非空树(n > 0),它具备以下性质:
    树中有一个称为"根(Root)"的特殊结点,用r 表示;
    其余结点(与r 相关联的)可分为m(m > 0)个互不相交的有限集T1,T2,...,Tm,其中每个集合本身又是一颗树,称为原来树的"子树(SubTree)"。

树与非树?

  • 子树是不相交的
  • 除了根结点外,每个结点有且仅有一个父节点
    一颗N个结点的树有N-1条边(我认为可以用构造性的存在性证明或是数学归纳法来证明这一点)

树的一些基本术语:

  • 结点的度(Degree):结点的子树个数
  • 树的度:树的所有结点中最大的度数
  • 叶结点(Leaf):度为0的结点
  • 父结点(Parent):有子树的结点是其子树的根结点的父结点
  • 子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点;子结点也称孩子结点
  • 兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点
  • 路径和路径长度(Path):从结点n1到nk的路径为一个结点序列n1,n2,...,nk,ni是ni+1的父结点,路径所包含的边的个数为路径的长度
  • 祖先结点(Ancestor):沿树根到某一结点路径上的所有结点都是这个结点的祖先结点
  • 子孙结点(Descendant):某一结点的子树中的所有结点都是这个结点子孙
  • 结点的层次(Level):规定根结点在1层,其它任一结点的层数时其父节点的层数加1
  • 树的深度(Depth):树中所有结点中的最大层次是这棵树的深度

树的表示

  • 儿子-兄弟表示法
  • 括号表示法

树的算法实现

typedef char ElementType;
typedef struct Node{   
    ElementType data;   
    struct Node * child;   
    struct Node * sibling;   
} TreeNode;
链接:
  • http://chuansong.me/n/729497552547

你可能感兴趣的:(树)