一棵二叉树的繁茂程度定义为各层结点数的最大值与树的高度和乘积,求二叉树的繁茂程度。
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef struct Node
{
int data;
struct Node *llink,*rlink;
}Node,*Tree;
Status SearchBST(Tree T,int key,Tree f,Tree *p);
Status InsertBST(Tree *T,int e);
void inorder(Tree T,int ly,int level[],int *height);
int main()
{
int i,ly=1;
int height,width;
int level[20]={0,};
height=width=1;
Tree T;
T=(Tree)malloc(sizeof(Node));
T=NULL;
int e;
printf("What number you want to search--0 to quit:");
scanf("%d",&e);
while(e)
{
if(InsertBST(&T,e))
printf("Done!");
else
printf("It`s been inserted already.");
printf("\nWhat number you want to search--0 to quit:");
scanf("%d",&e);
}
inorder(T,ly,level,&height);
for(i=1;i<=height;i++)
if(width<level[i])
width=level[i];
printf("\nwidth=%d,height=%d.\n",width,height);
return 0;
}
Status SearchBST(Tree T,int key,Tree f,Tree *p)
{
if(!T)
{
*p=f;
return FALSE;
}
else if(key==T->data)
{
*p=T;
return TRUE;
}
else if(key<T->data)
{
return SearchBST(T->llink,key,T,p);
}
else
return SearchBST(T->rlink,key,T,p);
}
Status InsertBST(Tree *T,int e)
{
Tree p;
p=(Tree)malloc(sizeof(Node));
if(!SearchBST(*T,e,NULL,&p))
{
Tree s;
s=(Tree)malloc(sizeof(Node));
s->data=e;
s->llink=s->rlink=NULL;
if(!p)
(*T)=s;
else if(e<p->data)
p->llink=s;
else
p->rlink=s;
return TRUE;
}
else
return FALSE;
}
void inorder(Tree T,int ly,int level[],int *height)
{
if(T)
{
inorder(T->llink,ly+1,level,height);
level[ly]++;
if(*height<ly)
*height=ly;
inorder(T->rlink,ly+1,level,height);
}
}