第四题(左孩子右兄弟表示树,求树的叶结点个数)
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define MaxSize 50
typedef char Elemtype;
typedef struct node{
Elemtype data;
struct node *fch,*nsib;
}*Tree;
Tree CreateTree()
{
Elemtype data;
Tree T;
scanf("%d",&data);
if(data==-1)return NULL;
else{
T=(Tree)malloc(sizeof(Tree));
T->data=data;
printf("请输入%d的右兄弟: \n",data);
T->nsib=CreateTree();
printf("请输入%d的左孩子: \n",data);
T->fch=CreateTree();
return T;
}
}
int Leaves(Tree t)
{
if(t==NULL)return 0;
if(t->fch==NULL) return 1+Leaves(t->nsib);
else return Leaves(t->fch)+Leaves(t->nsib);
}
int main()
{
printf("请输入根节点信息\n");
Tree T=CreateTree();
printf("当前树的叶子结点个数为: %d\n",Leaves(T));
return 0;
}
第五题(左孩子右兄弟表示法,求树高)
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define MaxSize 50
typedef char Elemtype;
typedef struct node{
Elemtype data;
struct node *fch,*nsib;
}*Tree;
Tree CreateTree()
{
Elemtype data;
Tree T;
scanf("%d",&data);
if(data==-1)return NULL;
else{
T=(Tree)malloc(sizeof(Tree));
T->data=data;
printf("请输入%d的右兄弟: \n",data);
T->nsib=CreateTree();
printf("请输入%d的左孩子: \n",data);
T->fch=CreateTree();
return T;
}
}
int Height(Tree T)
{
if(T==NULL)return 0;
else{
int hc,hs;
hc=Height(T->fch);
hs=Height(T->nsib);
if(hc+1>hs)return hc+1;
else return hs;
}
}
int main()
{
printf("请输入根节点信息\n");
Tree T=CreateTree();
printf("根节点的高度为: %d\n",Height(T));
return 0;
}
第六题(利用层次遍历数组和度的数组构造左孩子右兄弟树)
void createCSTree_Degree(CSTree&T,Elemtype e[],int degree[],int n)
{
CSNode *pointer=malloc(sizeof(CSNode*n));
int i,j,d,k=0;
for(i=0;i<n;i++)
{
pointer[i]->data=e[i];
pointer[i]->lchild=pointer[i]->rsibling=NULL;
}
for(i=0;i<=n;i++)
{
d=degree[i];
if(d)
{
k++;
pointer[i]->lchild=pointer[k];
for(j=2;j<=d;j++){
k++;
pointer[k-1]->rsibling=pointer[k];
}
}
}
T=pointer[0];
delete []pointer;
}