我有一个问题。如何添加两个数组L(左子树的元素)和D(右子树的元素)并创建二叉树?它不是二叉搜索树。然而,我拥有的这些数据存储在一个文件中,我已经设法将带有数字的行转换为int数组S-> Left元素和D-> Right元素。最后用p我已经存储了第一行的节点数。该文件包含以下行:
7 - >节点数
2 4 0 0 7 0 0 - >左子树元素
3 5 6 0 0 0 0 - >右子树元素
但是,我的任务是构建此代码并对二叉树进行后序,顺序和前序遍历,输出应如下所示:
预购:1 2 4 5 7 3 6
按顺序:4 2 7 5 1 3 6
后序:4 7 5 2 6 3 1
我不清楚为什么有1。我确信1是根,但我不知道如何将其余元素添加到S和D数组的二叉树中。
到目前为止我的代码看起来像这样:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int p;
int length1, length2, *S, *D;
int j = 0, k;
const char *v1;
const char *v2;
FILE *fptr = fopen("sd.in", "r");
if (fptr == NULL)
{
printf("Failed to open file\n");
return - 1;
}
char buf[3][100];
int i = 0;
while ((fgets(buf[i], 100, fptr) != NULL) && (i < 3))
{
printf("%s\n", buf[i++]);
}
fclose(fptr);
p = atoi(buf[0]);
v1 = buf[1];
v2 = buf[2];
length1 = strlen(v1);
length2 = strlen(v2);
S = (int*)malloc(length1 *sizeof(int));
D = (int*)malloc(length2 *sizeof(int));
while (sscanf(v1, "%d%n", &S, &length1) == 1)
{
printf(" element %d is %d\n", j, S);
v1 += length1;
j++;
}
while (sscanf(v2, "%d%n", &D, &length2) == 1)
{
printf(" element %d is %d\n", k, D);
v2 += length2;
k++;
}
printf("%d\n", p);
return 0;
}