c - 如何解决无法输出结果的问题?
问题描述
问题:按照之前的顺序,按照二叉树的顺序构建一棵二叉树并输出。问题:引发运行时错误。我认为这个问题可能会在fir_in_crea
功能上产生,但我无法解决这个问题
主函数.c
#include "AllFun.h"
int main(int argc, char* argv[])
{
int n;
printf("Node numbers: ");
scanf_s("%d", &n);
int A[100], B[100];
create(A, n);
create(B, n);
BiNode *BT = fir_in_crea(A, 1, 8, B, 1, 8);
print(BT);
return 0;
}
AllFun.h
#include <stdio.h>
#include <stdlib.h>
typedef struct bitree {
int data;
struct bitree* lchild, *rchild;
} BiNode;
void create(int array[], int num);
void print(BiNode *bt);
BiNode *fir_in_crea(int A[], int s1, int e1, int B[], int s2, int e2);
其他函数
#include "AllFun.h"
void create(int array[], int num)
{
printf("Enter elements of array: ");
for (int i = 0; i < num; ++i)
scanf_s("%d", &array[i]);
}
void print(BiNode* bt)
{
printf("Output as level order: ");
BiNode *queue[100], *temp;
int s = 0, e = 0;
queue[e++] = bt;
while (s != e) {
temp = queue[s++];
printf("%d", temp->data);
if (temp->lchild)
queue[e++] = temp->lchild;
if (temp->rchild)
queue[e++] = temp->rchild;
}
}
BiNode *fir_in_crea(int A[], int s1, int e1, int B[], int s2, int e2)
{
BiNode *bt;
int llen, rlen;
int i;
bt = malloc(sizeof(*bt));
bt->data = A[s1];
for (i = s2; B[i] != bt->data; ++i);
llen = i - s2;
rlen = e2 - i;
if (llen)
bt->lchild = fir_in_crea(A, s1+1, s1 + llen, B, s2, s2 + llen - 1);
else
bt->lchild = NULL;
if (rlen)
bt->rchild = fir_in_crea(A, e1 - llen + 1, e1, B, e2 - rlen + 1, e2);
else
bt->rchild = NULL;
return bt;
}