概述
以孩子兄弟链表为存储结构,设计递归和非递归算法求树的深度
#include <stdio.h>
#include <stdlib.h>
#define maxsize 20
typedef struct Node
{
char data;
struct Node *firstchild,*nextsibling;
}Node,*BiTree;
int CreateBiTree(BiTree *T);
int TreeHeightRecur(BiTree T);
int TreeHeightCycl(BiTree T);
int Max(int a,int b);
int main()
{
BiTree *T;
T=(BiTree *)malloc(sizeof(BiTree));
CreateBiTree(T);
int h1,h2;
h1=TreeHeightRecur(*T);
h2=TreeHeightCycl(*T);
printf("%d %dn",h1,h2);
return 0;
}
int CreateBiTree(BiTree *T)
{
fflush(stdin);
printf("please input the node data:");
char ch;
scanf("%c",&ch);
*T=(BiTree)malloc(sizeof(Node));
(*T)->data=ch;
char c;
fflush(stdin);
printf("Dose %c has children(y--yes,n--no):",ch);
scanf("%c",&c);
if(c=='y')
CreateBiTree(&(*T)->firstchild);
else
(*T)->firstchild=NULL;
fflush(stdin);
printf("Dose %c has siblings(y--yes,n--no):",ch);
scanf("%c",&c);
if(c=='y')
CreateBiTree(&(*T)->nextsibling);
else
(*T)->nextsibling=NULL;
return 0;
}
int TreeHeightRecur(BiTree T)
{
if(!T)
return 0;
else if(!T->firstchild)
return Max(1,TreeHeightRecur(T->nextsibling));
else
{
int hc,hs;
hc=TreeHeightRecur(T->firstchild);
hs=TreeHeightRecur(T->nextsibling);
if(hc+1>hs)
return hc+1;
else
return hs;
}
}
int Max(int a,int b)
{
return a>b? a:b;
}
int TreeHeightCycl(BiTree T)
{
BiTree t;
t=T;
BiTree Q[maxsize];
int front,last,rear,h;
front=h=0;
last=rear=front+1;
Q[front]=t;
while(front!=last)
{
t=Q[front];
front=(front+1)%maxsize;
//层次遍历
while(t!=NULL)
{
if(t->firstchild)
{
Q[rear]=t->firstchild; //第一子女入队
rear=(rear+1)%maxsize;
}
t=t->nextsibling; //同层兄弟指针后移
}
//如果本层结束,则深度+1
if(front==last)
{
h++;
last=rear; //last指针移到刚加入的子女层的最后一位
}
}
return h;
}
最后
以上就是虚幻皮皮虾为你收集整理的算法与数据结构考研试题精析-第6章算法设计题15的全部内容,希望文章能够帮你解决算法与数据结构考研试题精析-第6章算法设计题15所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复