这里我们讨论树的表示及其遍历操作,并建立森林与二叉树的对应关系。
用到的是孩子、兄弟表示法:链式存储,每个结点包含数据域和两个指针域,左指针指向第一个孩子结点。右指针指向兄弟结点。又称二叉链表存储法。
单颗树的二叉链表存储结构中根结点的右指针必为空,若要存储多棵树组成的森林,可将后一颗树的根结点看成前一颗树根结点的兄弟,即将后一颗树对应的二叉链表拼接到前一颗树根结点的右指针上,这称为森林的孩子-兄弟表示法或二叉链表存储法。
首先是辅助宏:
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
#define UNDERFLOW -2
#define NULL 0
typedef int Status;
typedef char TElemType;
二叉树的二叉链式存储结构定义:
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild; //左孩子结点 右孩子结点
}BiTNode,*BiTree;
森林的孩子-兄弟表示法的存储结构定义:
typedef struct CSNode{
TElemType data;
struct CSNode *firstchild,*nextsibling;
}CSNode,*CSTree;
根据已经存在的二叉树BiT 转换成孩子兄弟表示法得到的树或森林T 原二叉树BiT保持不变.
Status BiTreetoTreeorForest(BiTree BiT,CSTree &a