一,树的存储结构
1)顺序存储
双亲表示法
孩子表示法(顺序+链式存储)
顺序表表示根结点的子结点,子结点则用
//孩子表示法
struct CTNode{
int child; //在数组中的位置
struct CTNode* nextChild;//下一个孩子
};
typedef struct {
int data;
struct CTNode* firstChild;//第一个孩子
}CTBox;
typedef struct {
CTBox nodes[MAX_TREE_SIZE];
int n, r;
}CTree;
孩子兄弟表示法(纯链式存储) ****
firstchild指向第一个子结点(从左边数)
nextsibling指针指向与该结点同级的结点(同一个父结点)
树和二叉数的转换
类似上面存放树的方法,同级的结点就作为其next
第一个子结点作为firstchild
二,树和森林遍历
树的遍历
1)先根遍历(深度优先遍历)
2)层次遍历(广度优先遍历)
森林的遍历
1)先序遍历森林
近似的看作式树
也可先转换成二叉树孩子兄弟表示法
2)中序遍历森林
最好将其转换成二叉树