树的双亲结构转孩子链表结构
时间: 2023-11-27 12:45:13 浏览: 82
树的双亲结构转孩子链表结构的过程可以分为以下几个步骤:
1. 定义一个结构体,包含数据域和指向其第一个孩子结点和右兄弟结点的指针。
2. 遍历双亲结构,将每个结点的孩子结点按顺序排列成一个单链表。
3. 将每个结点的孩子链表的头指针存储在一个一维数组中,形成一个线性表。
4. 将每个结点的双亲结点的下标作为该结点的指针域,即可完成树的双亲结构转孩子链表结构。
具体实现可以参考以下代码:
```
typedef struct CSNode{
TElemType data;
struct CSNode *firstchild, *rightsib;
}CSNode, *CSTree;
void PreOrderTraverse(PTree T, CSTree &CT, int &k) {
if (T != NULL) {
CT = (CSTree)malloc(sizeof(CSNode));
CT->data = T->data;
CT->firstchild = NULL;
CT->rightsib = NULL;
if (T->parent != NULL) {
int i = 0;
while (T->parent->child[i] != T) i++;
if (i > 0) {
PreOrderTraverse(T->parent->child[0], CT->firstchild, k);
CSTree p = CT->firstchild;
for (int j = 1; j < i; j++) {
PreOrderTraverse(T->parent->child[j], p->rightsib, k);
p = p->rightsib;
}
}
}
k++;
}
}
void ParentToChild(PTree T, CSTree &CT) {
int k = 0;
PreOrderTraverse(T, CT, k);
}
```
阅读全文