# include<stdio.h>
# include<stdlib.h>
typedef struct Node
{
char data;
struct Node* left;
struct Node* right;
}Node,*Bitree;
Bitree Initcreat(Bitree* T)
{
char a = '\0';
scanf("%c", &a);
if (a == '#')
{
(*T) = NULL;
}
else
{
(*T) = (Bitree)malloc(sizeof(Node));
if ((*T) == NULL)
{
return NULL;
}
(*T)->data = a;
Initcreat(&(*T)->left);
Initcreat(&(*T)->right);
}
return (*T); //创建二叉树
}
void xian(Bitree* T)
{
if ((*T) == NULL)
{
return;
}
else
{
printf("%c", (*T)->data);
xian(&(*T)->left);
xian(&(*T)->right);
} //先序遍历二叉树
}
int Binarytreesize(Bitree* T)
{
if ((*T) == NULL)
{
return 0;
}
if ((*T)->left == NULL && (*T)->right == NULL)
{
return 1;
}
return Binarytreesize(&(*T)->left) + Binarytreesize(&(*T)->right) + 1; //计算二叉树结点个数
}
int Binarytreeleasize(Bitree* T)
{
if ((*T) == NULL)
{
return 0;
}
if ((*T)->left == NULL && (*T)->right == NULL)
{
return 1;
}
return Binarytreeleasize(&(*T)->left) + Binarytreeleasize(&(*T)->right); //计算二叉树叶子个数
}
int Binarytreelevelsize(Bitree* T,int k)
{
if ((*T) == NULL)
{
return 0;
}
if (k == 1)
{
return 1;
}
return Binarytreelevelsize(&(*T)->left, k - 1) + Binarytreelevelsize(&(*T)->right, k - 1); //计算二叉树每层叶子个数
}
int Binarytreedepth(Bitree* T)
{
if ((*T) == NULL)
{
return 0;
}
else if ((*T)->left == NULL && (*T)->right == NULL)
{
return 1;
}
else
{
int l = Binarytreedepth(&(*T)->left);
int r = Binarytreedepth(&(*T)->right);
return (l > r ? l : r) + 1; //计算二叉树深度
}