有关创建并输出二叉排序树的程序,求大神指导下
一个困扰了我很久的有关创建并中序遍历二叉排序树的程序,编译链接都没有错误,一运行就停止工作,伤心死了,求大神指导下:宝宝谢过了!
运行后显示:
代码如下:
#include "stdio.h"
#include <malloc.h>
#include <stdlib.h>
#define NULL 0
typedef struct node /*定义二叉链表结点类型*/
{
int data;
struct node *lchild,*rchild;
}NODE;
typedef struct stack /*定义顺序链表*/
{
NODE *v[100];
int top;
}STACK;
NODE *creat(NODE *t) /*二叉排序树的生成算法*/
{
int a[]={20,50,30,15,17,10,13};
int i;
NODE *neww,*p,*q;
t=(NODE*)malloc(sizeof(NODE));
t->data=a[0];
t->lchild=NULL;
t->rchild=NULL;
for(i=1;i<7;i++)
{neww=(NODE*)malloc(sizeof(NODE));
neww->data=a[i];
neww->lchild=NULL;
neww->rchild=NULL;
p=t;
while(p!=NULL) /*寻找插入位置*/
{q=p;
if(neww->data<p->data)
p=p->lchild;
else
p=p->rchild;
}
if(neww->data<q->data) /*插入结点*/
q->lchild=neww;
else
q->rchild=neww;
}
return t;
}
void push(STACK *s,NODE *p) /*入栈*/
{
if(s->top==99)
{printf("overflow\n");
exit(1);}
else
{s->top=s->top+1;
s->v[s->top]=p;}}
NODE *pop(STACK *s) /*出栈*/
{if(s->top==-1)
{printf("downflow\n");
exit(1);}
else
{
s->top=s->top-1;
return s->v[s->top+1];}}
void inorder(NODE *t) /*中序遍历非递归算法*/
{
NODE *p;
STACK *s;
s->top=-1;
p=t;
while((p!=NULL)||(s->top!=-1))
{while(p!=NULL)
{push(s,p);
p=p->lchild;}
if(s->top!=-1)
{p=pop(s);
printf("%10d\n",p->data);
p=p->rchild;}}
}
void main()
{
NODE *t,*m;
m=creat(t);
inorder(m);
}