首页 > 解决方案 > 为什么二叉树的创建会出现问题?

问题描述

该代码是为了创建存储在顺序结构中的二叉树,并能够以先前的顺序遍历二叉树。但是,当我创建二叉树时,它无法输出。为什么二叉树的创建会出现问题?结构有问题吗?请告诉我如何解决这个问题?我会感谢你所做的一切。

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int data;
    struct node* left;
    struct node* right;
}Tree;
typedef struct bit
{
    Tree *a[100];
    int length;
}Bitree;

typedef struct Stack
{
    Tree *sq[1000];
    int top;
}stack;

int empty(stack s)
{
    return s.top==-1;
}

void push(stack *s,Tree *p)
{
    s->sq[++s->top]=p;
}

void pop(stack *s)
{
    if(s->top!=-1)
    {
        s->top--;
    }
}
//return the top element


Tree *top(stack s)
{
    if(s.top!=-1)
        return s.sq[s.top];
}
Bitree *create(Bitree *tree1,int n)
{
    int x;
    tree1->a[0]->data=1;
    printf("%d ",tree1->a[0]->data);
    tree1->length=0;
    printf("请输入根节点\n");
    scanf("%d ",&x);
    tree1->a[1]->data=x;
    tree1->length++;
    for(int i=2;i<=n;i++)
    {
        if(i%2==0)
        {
            printf("please input left binary tree\n");
            scanf("%d ",&x);
            tree1->a[i]->data=x;
            tree1->a[i/2]->left=tree1->a[i];
            tree1->length++;
        }
        else
        {
            printf("please input right binary tree\n");
            scanf("%d ",&x);
            tree1->a[i]->data=x;
            tree1->a[i/2]->right=tree1->a[i];
            tree1->length++;
        }
    }
    return tree1;
}
void preorder1(Bitree *t)
{
    stack s;
    s.top=-1;
    if(t->a[1]!=NULL) {
        push(&s,t->a[1]);
    }
    while(!empty(s))
    {
        Tree *x=top(s);
        pop(&s);
        printf("%d ",x->data);
        if(x->right!=NULL)
            push(&s,x->right);
        if(x->left!=NULL)
            push(&s,x->left);
    }
}
int main()
{

    int n;
    Bitree *t1;
    scanf("%d",&n);
    t1=create(t1,n);
    preorder1(t1);
}

标签: c

解决方案


我看到的第一个问题,你忘了分配你的Bitree和其中的a结构。尝试这个 :

int main()
{

int n;
Bitree *t1 = (Bitree*) malloc(sizeof(Bitree));
int i = 0 ; 
for(i ; i < 100 ; i++)
        t1->a[i] = (Tree*) malloc(sizeof(Tree)); 
scanf("%d",&n);
t1=create(t1,n);
preorder1(t1);
for(i = 0 ; i < 100 ; i++)
        free(t1->a[i]); 
free(t1); 
}

推荐阅读