| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 811 人关注过本帖
标题:有关创建并输出二叉排序树的程序,求大神指导下
只看楼主 加入收藏
我不懂yq
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-11-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
有关创建并输出二叉排序树的程序,求大神指导下
一个困扰了我很久的有关创建并中序遍历二叉排序树的程序,编译链接都没有错误,一运行就停止工作,伤心死了,求大神指导下:
宝宝谢过了!
运行后显示:

代码如下:
#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);
}
搜索更多相关主题的帖子: include 宝宝 include 宝宝 
2016-11-08 21:01
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:20 
void inorder(NODE *t)  /*中序遍历非递归算法*/
{
    NODE *p;
    STACK *s;
    s=(STACK *)malloc(sizeof(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;
        }
    }
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-09 13:12
我不懂yq
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-11-8
收藏
得分:0 
回复 2楼 九转星河
谢谢你啦,问题果然解决了
2016-11-10 21:41
快速回复:有关创建并输出二叉排序树的程序,求大神指导下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018106 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved