已知二叉树T采用二叉链表结构存储,每个结点有二个字段:data, lchild和rchild。设计完整c语言代码 求出T的顺序存储结构T[1..n],要求:如某位置为空,将其置为空格;如超出下标范围n,则报错;最后返回实际的最大下标。
时间: 2024-02-26 17:57:59 浏览: 57
数据结构课程设计二叉树采用二叉链表作为存储结构
以下是代码实现:
```c
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
// 二叉树结点结构体
typedef struct BTNode {
int data;
struct BTNode* lchild;
struct BTNode* rchild;
} BTNode, * BiTree;
// 二叉树的顺序存储结构数组
int T[MaxSize];
// 按照先序遍历顺序构建二叉树
BiTree CreateBiTree() {
int data;
scanf("%d", &data);
if (data == 0) {
return NULL;
}
BiTree root = (BiTree)malloc(sizeof(BTNode));
root->data = data;
root->lchild = CreateBiTree();
root->rchild = CreateBiTree();
return root;
}
// 将二叉树T转换成顺序存储结构T[1..n]
int ConvertToSeq(BiTree T, int idx) {
if (T == NULL) {
T[idx] = ' ';
return idx;
}
T[idx] = T->data;
idx = ConvertToSeq(T->lchild, 2 * idx);
idx = ConvertToSeq(T->rchild, 2 * idx + 1);
return idx;
}
int main() {
BiTree T = CreateBiTree();
int n = ConvertToSeq(T, 1);
for (int i = 1; i <= n; i++) {
if (T[i] == 0) {
printf(" ");
} else {
printf("%d", T[i]);
}
}
return 0;
}
```
代码思路:
1. 定义二叉树结点的结构体;
2. 定义二叉树的顺序存储结构数组;
3. 按照先序遍历的顺序构建二叉树;
4. 将二叉树T转换成顺序存储结构T[1..n];
5. 遍历顺序存储结构数组T,输出每个元素(如果为空则输出一个空格);
6. 完成。
阅读全文