什么是树?
客观世界中许多事物存在的层次关系:人类社会家谱、社会组织结构、图书信息管理等。层次组织在管理上更高效。
定义:个结点构成的有限集合。当 时,称为空树。
性质(对于任何一个非空树):
注意:
子树是不相交的、出了根节点外,每个结点有且仅有一个父节点、一个N个结点的树有N-1条边
- 树中有一个称为“根”的特殊结点,用表示
- 其余结点可分为个互不相交的有限集,其中每个集合本身又是一棵树,称为原来树的“子树”
树的一些基本用语:
- 结点的度:结点的子树个数(A的度为3,B的度为2,C的度为1等等)
- 树的度:树的所有结点中的最大的度数(A和D的度数最大都为3,因此树的度为3)
- 叶结点:度为零的结点(F、L、H、M、J、K都是度为0的结点)
- 父结点:有子树的结点是其子树的根节点的父结点
- 子结点:如果A是B的父结点,那么B就是A的子结点
- 兄弟结点:具有同一父结点的各结点彼此是兄弟结点
- 路径和路径长度:路径所包含边的个数为路径的长度
- 祖先结点:沿树根到某一结点路径上的所有结点都是这个结点的祖先结点
- 子孙结点:某一结点的子树中的所有结点是这个结点的子孙
- 结点的层次:规定根节点在1层,其它任一结点的层数是其父结点的层数加1
- 树的深度:树中所有结点中的最大层次即树的深度
树的表示:
儿子兄弟表示法:
typedef struct TNode *Tree; typedef Tree BinTree; /* 二叉树类型 */ struct TNode{ /* 树结点定义 */ ElementType Data; /* 结点数据 */ BinTree Left; /* 指向左子树 */ BinTree Right; /* 指向右子树 */ };