使用C中给出的两个数组构建二叉树

时间:2017-05-10 17:24:14

标签: c arrays tree binary-tree

我有一个问题。如何添加两个数组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;
}

0 个答案:

没有答案