3. 树的性质
- 性质一:树中的结点数等于所有结点的度数之和加1.
- 性质二:
- 性质三:
- 性质四:
4. 树的基本运算
- 先根遍历
- 访问根结点;
- 按照从左到右的顺序先根遍历根结点的每一棵子树。
- 后根遍历
- 按照从左到右的顺序后根遍历根结点的每一棵子树;
- 访问根结点。
- 层次遍历
- 从根结点开始按从上到下、从左到右的次序访问树中的每一个结点。
5. 树的存储结构
- 双亲存储结构(PTree)
顺序存储;求某个结点的双亲结点十分容易,但在求某个结点的孩子结点时需要遍历整个存储结构
int tree[maxSize];
tree[0] = -1;
tree[1] = 0;
tree[2] = 0;
tree[3] = 0;
tree[4] = 1;
tree[5] = 1;
- 孩子链存储结构(TSonNode)
查找某结点的孩子结点十分方便,但查找某结点的双亲结点比较费时,此外,当树的度较大时存在较多的空指针域。
typedef struct Branch
{
int cIdx;
Branch* next;
}Branch;
typedef struct
{
int data;
Branch* first;
}TNode;
- 孩子兄弟链存储结构(TSBNode)
实际上是把该树转换为二叉树的存储结构。
(二)、二叉树
1. 二叉树的定义
二叉树(binary tree)是一个有限的结点集合,这个集合或者为空,或者由一个根结点和两棵互不相交的称为左子树(left subtree)和右子树(right subtree)的二叉树组成。
二叉树的结构简单、存储效率高,其运算算法也相对简单,而且任何m次树都可以转化为二叉树结构,因此二叉树具有很重要的地位。
二叉树和度为2的树(2次树)是不同的,对于非空树,其差别表现在以下两点:·
- 度为2的树中至少有一个结点的度为2,而二叉树没有这种要求;
- 度为2的树不区分左、右子树,而二叉树是严格区分左、右子树的。