c - 为什么二叉树的创建会出现问题?
问题描述
该代码是为了创建存储在顺序结构中的二叉树,并能够以先前的顺序遍历二叉树。但是,当我创建二叉树时,它无法输出。为什么二叉树的创建会出现问题?结构有问题吗?请告诉我如何解决这个问题?我会感谢你所做的一切。
#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);
}
解决方案
我看到的第一个问题,你忘了分配你的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);
}
推荐阅读
- r - 如何格式化添加到 ggplot 的 R2 和 RMSE 表?
- javascript - 如何在 rxjs 中冒泡滚动事件
- c# - 有没有办法将具有多个模式的正则表达式(Regex)分解为多行?
- firebase - 将数据发送到 Firebase Firestore 时收到奇怪的警告
- sql - Pivot 函数仅返回总计
- r - 绘图中的重叠线(ggplot2)
- javascript - 使用ajax Django刷新表而不刷新页面
- mysql - 使用 node.js 在 mysql 中插入多条记录失败
- python - 过滤数据框中的数据
- ruby-on-rails - 当用户在 Ruby on Rails 6 中输入错误时,如何不将字符串转换为 0?