完善上述c语言代码并添加注释,要求中序遍历的结点输出,最后输出顺序存储的结果,并输出实际的最大下标
时间: 2024-02-26 07:58:02 浏览: 67
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
以下是代码实现:
```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;
}
// 中序遍历输出结点
void InOrder(BiTree T) {
if (T == NULL) {
return;
}
InOrder(T->lchild);
printf("%d ", T->data);
InOrder(T->rchild);
}
int main() {
BiTree T = CreateBiTree();
InOrder(T);
printf("\n");
int n = ConvertToSeq(T, 1);
for (int i = 1; i <= n; i++) {
if (T[i] == 0) {
printf(" ");
} else {
printf("%d", T[i]);
}
}
printf("\n");
printf("实际最大下标为:%d", n);
return 0;
}
```
代码思路:
1. 定义二叉树结点的结构体;
2. 定义二叉树的顺序存储结构数组;
3. 按照先序遍历的顺序构建二叉树;
4. 中序遍历输出每个结点的值;
5. 将二叉树T转换成顺序存储结构T[1..n];
6. 遍历顺序存储结构数组T,输出每个元素(如果为空则输出一个空格);
7. 输出实际最大下标;
8. 完成。
阅读全文