C语言 – 数据结构 — 求二叉树的深度和叶子节点数
#include<stdio.h>
#include<stdlib.h>
typedef struct Tree
{
int data;
struct Tree *lchild;
struct Tree *rchild;
}Tree, *BitTree;
BitTree CreateLink()
{
int data;
BitTree T;
scanf("%d", &data);
if (data == -1)
return NULL;
else
{
T = (BitTree)malloc(sizeof(Tree));
T->data = data;
printf("请输入%d的左子树: ", data);
T->lchild = CreateLink();
printf("请输入%d的右子树: ", data);
T->rchild = CreateLink();
return T;
}
}
int Depth(BitTree B)
{
if (B == NULL)
return 0;
int l, r;
l = Depth(B->lchild);
r = Depth(B->rchild);
if (l < r)
return r + 1;
else
return l + 1;
}
int NodeNum(BitTree B)
{
if (B == NULL)
return 0;
if (B->lchild == NULL && B->rchild == NULL)
return 1;
return NodeNum(B->lchild) + NodeNum(B->rchild);
}
int main()
{
BitTree B;
int deep;
printf("请输入二叉树的数据:\n");
B = CreateLink();
deep = Depth(B);
int cnt;
cnt = NodeNum(B);
printf("二叉树的深度为 %d", deep);
printf("\n二叉树的叶子结点: %d", cnt);
return 0;
}