对于如图所示一个二叉树,求叶子数量和深度
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct BinaryNode
{
//数据域
char ch;
//指针域
struct BinaryNode* lChild;
struct BinaryNode* rChild;
};
void calculateLeafNum(struct BinaryNode* root, int* p)
{
if (root == NULL)
{
return;
}
if (root->lChild == NULL && root->rChild == NULL)
{
(*p) ++;
}
calculateLeafNum(root->lChild, p);
calculateLeafNum(root->rChild, p);
}
int getTreeHeigh(struct BinaryNode* root)
{
if (root == NULL)
{
return 0;
}
int lHeigh = getTreeHeigh(root->lChild);
int rHeigh = getTreeHeigh(root->rChild);
int heigh = lHeigh > rHeigh ? lHeigh + 1 : rHeigh + 1;
return heigh;
}
void test01()
{
struct BinaryNode nodeA = { 'A',NULL,NULL };
struct BinaryNode nodeB = { 'B',NULL,NULL };
struct BinaryNode nodeC = { 'C',NULL,NULL };
struct BinaryNode nodeD = { 'D',NULL,NULL };
struct BinaryNode nodeE = { 'E',NULL,NULL };
struct BinaryNode nodeF = { 'F',NULL,NULL };
struct BinaryNode nodeG = { 'G',NULL,NULL };
struct BinaryNode nodeH = { 'H',NULL,NULL };
nodeA.lChild = &nodeB;
nodeB.rChild = &nodeC;
nodeC.lChild = &nodeD;
nodeC.rChild = &nodeE;
nodeA.rChild = &nodeF;
nodeF.rChild = &nodeG;
nodeG.lChild = &nodeH;
//调用遍历函数
int num = 0;
calculateLeafNum(&nodeA, &num);
printf("二叉树的叶子数量为:%d\n", num);
int Heigth = getTreeHeigh(&nodeA);
printf("二叉树的深度为:%d\n", Heigth);
}
int main()
{
test01();
system("pause");
return NULL;
}