统计二叉树中度为0,1和2的结点个数

Description

给定先序序列,按照该序列创建对应的二叉树,并输出该二叉树度为0,1和2的结点个数。

Input

一行,二叉树按先序遍历序列,空指针用字符^占位

Output

一行,三个整数分别代表该二叉树度为0,1和2的结点个数

Sample Input
ABD^^^CE^^F^^

Sample Output
3 1 2

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>
int a_0 = 0,a_1 = 0,a_2 = 0;
typedef struct node{  
    char ch;  
    struct node *Lchild;  
    struct node *Rchild;  
}BiTNode,*BiTree;  
void Q_CreatTree(BiTree *T);  
int NodeNumber_1(BiTree T);
int NodeNumber_2(BiTree T);
int NodeNumber_0(BiTree T);
int main(void)  
{  
    BiTree T;
	Q_CreatTree(&T);
	getchar();
	NodeNumber_0(T);
	NodeNumber_1(T);
	NodeNumber_2(T);
	printf("%d ",a_0);
	printf("%d ",a_1);
	printf("%d",a_2);
}  
void Q_CreatTree(BiTree *T)
{  
    char str;  
    str=getchar();  
    if(str=='^')  
    {  
        *T=NULL;  
    }  
    else  
    {  
        (*T)=(BiTree)malloc(sizeof(BiTNode));  
        (*T)->ch=str;  
        Q_CreatTree( &( (*T)->Lchild ) );  
        Q_CreatTree( &( (*T)->Rchild ) );  
    }  
}
int NodeNumber_0(BiTree T)
{
	if(T)
	{
		if(T->Lchild==NULL&&T->Rchild==NULL)
		{
			a_0+=1;
		}
			NodeNumber_0( T->Lchild );
			NodeNumber_0( T->Rchild );
	}
}
int NodeNumber_1(BiTree T)
{
	if(T)
	{
		if((T->Lchild==NULL&&T->Rchild!=NULL) ||(T->Lchild!=NULL&&T->Rchild==NULL))
		{
			a_1+=1;
		}
			NodeNumber_1( T->Lchild );
			NodeNumber_1( T->Rchild );
	}
}
int NodeNumber_2(BiTree T)
{
	if(T)
	{
		if((T->Lchild!=NULL)&&(T->Rchild!=NULL))
		{
			a_2+=1;
		}
			NodeNumber_2( T->Lchild );
			NodeNumber_2( T->Rchild );
	}
}

原创文章 382 获赞 114 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_45949073/article/details/105862820
今日推荐