算法与数据结构考研试题精析-第9章算法设计题35

    xiaoxiao2025-07-09  14

    一棵二叉树的繁茂程度定义为各层结点数的最大值与树的高度和乘积,求二叉树的繁茂程度。

    #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); } }
    最新回复(0)