Description
给定先序序列,按照该序列创建对应的二叉树,并输出该二叉树度为0,1和2的结点个数。
Input
一行,二叉树按先序遍历序列,空指针用字符^占位
Output
一行,三个整数分别代表该二叉树度为0,1和2的结点个数
Sample Input
ABD^^CEF^
Sample Output
3 1 2
#include<malloc.h>
#include<stdio.h>
//字符类型
#define TElemType char
//二叉树的二叉链表的表示与实现
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序创建二叉树 ,假设树中结点为字符型,以^代表为空结点
BiTree CreateBiTree()
{
char ch;
BiTree T;
ch=getchar();
if(ch=='^')
T=NULL;
else
{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=ch;
T->lchild =CreateBiTree();
T->rchild =CreateBiTree();
}
return T;
}
//统计度为0的结点个数,其值用sum返回
void countLeaf(BiTree T, int *sum)
{
if(T)
{
if(!T->lchild && !T->rchild)
(*sum)++;
countLeaf(T->lchild,sum);
countLeaf(T->rchild,sum);
}
}
//统计度为1的结点个数,其值用sum返回
void countOneChild(BiTree T, int *sum)
{
if(T)
{
if(!T->lchild && T->rchild || T->lchild && !T->rchild )
(*sum)++;
countOneChild(T->lchild,sum);
countOneChild(T->rchild,sum);
}
}
//统计度为2的结点个数,其值用sum返回
void countTwoChild(BiTree T, int *sum)
{
if(T)
{
if(T->lchild && T->rchild )
(*sum)++;
countTwoChild(T->lchild,sum);
countTwoChild(T->rchild,sum);
}
}
int main()
{
BiTree T;
int sum0=0,sum1=0,sum2=0;
T=CreateBiTree();
//度为0的结点个数
countLeaf(T,&sum0);
printf("%d ",sum0);
//度为1的结点个数
countOneChild(T,&sum1);
printf("%d ",sum1);
//度为2的结点个数
countTwoChild(T,&sum2);
printf("%d",sum2);
return 0;
}
版权声明:本文为weixin_46297583原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。