c语言写的二叉排序树编译没报错,但是运行的时候出错,求大神指教

#include<stdio.h>#include<stdlib.h>structBiNode{intdata;structBiNode*lchild;structBiN... #include <stdio.h>
#include <stdlib.h>

struct BiNode
{
int data;
struct BiNode *lchild;
struct BiNode *rchild;
};

int main()
{
int n;
struct BiNode *r;
void Creat(int *a);
struct BiNode *Search(struct BiNode *r,int k);
void Insert(struct BiNode *r,struct BiNode *k);
int k;
int a[9]={55,30,15,35,5,10,65,60,80};
Creat(a);
printf("please enter a number to search.\n");
scanf("%d",&k);
Search(r,k);
return 0;

}

void Creat(int a[])
{
void Insert(struct BiNode *r,struct BiNode *k);
int n,i;
struct BiNode *r;

for( i=0;i<n;i++)
{
struct BiNode *p;

p->data=a[i];
p->lchild=NULL;
p->rchild=NULL;
Insert(r,p);
}

}
void Insert(struct BiNode *r,struct BiNode *k)
{
if(r==NULL)
r=k;
else if(k->data<r->data)
Insert(r->lchild,k);
else Insert(r->rchild,k);
}
struct BiNode *Search(struct BiNode *r,int k)
{
if(r==NULL)
return NULL;
else if(r->data==k)
return r;
else if(r->data<k)
Search(r->lchild,k);
else
Search(r->rchild,k);
};
展开
 我来答
渴望被苹果砸中
2013-12-31
知道答主
回答量:40
采纳率:0%
帮助的人:21.5万
展开全部
是你的程序有错但你的程序语法没错,所以编译的时候不会出错,像函数声明应该你定义的函数是什么样函数声明时就应该是什么样,void Creat(int *a);这里我个人认为应该是void Creat(int a[]);要上下保持一致。向这里for( i=0;i<n;i++)你的n是多少并不知道再调用的时候这个循环没执行就会影响到你的下一个调用。这些细微的错误建议你一步步调试去看去找错在哪里
ma981299350
2014-01-01
知道答主
回答量:17
采纳率:0%
帮助的人:12万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <malloc.h>

struct BiNode
{
int data;
struct BiNode *lchild;
struct BiNode *rchild;
};
BiNode * createbt(int a[],int i,int n) ;
void showBiNode(BiNode *p);
struct BiNode *Search(struct BiNode *r,int k);
int main()
{

int k;
int a[9]={55,30,15,35,5,10,65,60,80};
struct BiNode *r;

r=createbt(a,0,9);
showBiNode(r);
printf("please enter a number to search.\n");
scanf("%d",&k);
BiNode *p=Search(r,k);
if (p!=NULL)
{
std::cout<<"查找成功"<<std::endl;
}
return 0;

}

BiNode * createbt(int a[],int i,int n)
{
BiNode * p;

if(i>=n) return NULL;
{
p=(BiNode *)malloc(sizeof(BiNode));//判断节点是不是虚节点,如果是的话就分配一个地址
p->data =a[i]; //用于存放数据的一个数组
p->lchild =createbt(a,2*i+1,n); //你先把这个二叉树补充成带有NULL的完全二叉树,I表示从根往下数第几个节点
if(i>=n) return NULL;
p->rchild =createbt(a,2*i+2,n);
return p;
}
}

struct BiNode *Search(struct BiNode *r,int k)
{
if (r!=NULL)
{ if(r->data==k)return r;
Search(r->lchild,k);
Search(r->rchild,k);
}

}
void showBiNode(BiNode *p)
{
if (p!=NULL)
{
printf("%d \n",p->data);
showBiNode(p->lchild);
showBiNode(p->rchild);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式