树的定义
树(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;
网友评论