首页 > 解决方案 > 如何解决无法输出结果的问题?

问题描述

问题:按照之前的顺序,按照二叉树的顺序构建一棵二叉树并输出。问题:引发运行时错误。我认为这个问题可能会在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;
}

标签: cruntime-errorbinary-tree

解决方案


推荐阅读