二叉搜索树(binary search tree)的构造

这是题目要求

#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天,您在需要使用的时候【私信】联系我,我会为您补发。