这是题目要求
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node{
int value;
struct node *left;
struct node *right;
int level;
}node,*num;
void find(num p,int x)
{
int m=0;
while (p!=NULL&&p->value!=x)
{
m++;
if(x>p->value)
p=p->right;
else
p=p->left;
}
m++;
printf("%d\n",m);
}
int main()
{
int i=0;
int maxlevel=0;
int countlevel=0;
int t[1000]={0};//该数组用于储存每层的度
int n;// 节点总个数
scanf("%d",&n);
int key[n];
for(i=0;i<n;i++)//给出n个不同的整数
{
scanf("%d",&key[i]);
}
int m;// m个整数
scanf("%d",&m);
int search[m];
for(i=0;i<m;i++)//给出m个不同的整数
{
scanf("%d",&search[i]);
}
num p=(num )malloc(sizeof (num));
p->level=1;
p->value=key[0];
p->left=p->right=NULL;
t[1]=1;
num tree=(num )malloc(sizeof (num));
tree=p;
num q=NULL;
//根据整数输入顺序构建二叉搜索树
for(i=1;i<n;i++)//给出n个不同的整数
{
countlevel=1;
tree=p;
while(1)
{
if(tree==NULL)
{
tree= (num)malloc(sizeof(node));
tree->value=key[i];
tree->level=countlevel;
tree->left=NULL;
tree->right=NULL;
if(maxlevel<countlevel)
{
maxlevel=countlevel;
}
t[countlevel]++;
break;
}
else{
if(key[i]>tree->value)
{
countlevel++;
if(tree->right==NULL)
{
q = (num)malloc(sizeof(node));
q->value=key[i];
q->level=countlevel;
q->left=NULL;
q->right=NULL;
tree->right=q;
if(maxlevel<countlevel)
{
maxlevel=countlevel;
}
t[countlevel]++;
break;
}
else{
tree=tree->right;
}
}
else{
countlevel++;
if(tree->left==NULL)
{
q = (num)malloc(sizeof(node));
q->value=key[i];
q->level=countlevel;
q->left=q->right=NULL;
tree->left=q;
if(maxlevel<countlevel)
{
maxlevel=countlevel;
}
t[countlevel]++;
break;
}
else{
tree=tree->left;
}
}
}
}
}
printf("%d\n",maxlevel);
for(i=1;i<=maxlevel;i++)
{
printf("%d ",t[i]);
}
printf("\n");
//按输入m个数的顺序,得出查找长度
for(i=0;i<m;i++)
{
find(p,search[i]);
}
getchar();
getchar();
return 0;
}
这是我写的代码
调试的时候是这样的
但一运行起来就是这样的
求指点
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。