#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct BiNode
{
char ch;
struct BiNode *lchild; /* 左孩子 */
struct BiNode *rchild; /* 右孩子 */
}BNODE;
/* 计算叶子结点 */
void countLeafNum(BNODE *root, int *num)
{
if (NULL == root)
return;
if (root->lchild == NULL && root->rchild == NULL)
(*num)++;
countLeafNum(root->lchild, num);
countLeafNum(root->rchild, num);
}
/* 计算树的高度 */
int getTreeHeight(BNODE *root)
{
if (root == NULL)
return 0;
/* 执行时先找到叶子结点,然后一层层返回,最后到root */
int lheight = getTreeHeight(root->lchild);
int rheight = getTreeHeight(root->rchild);
int height = (lheight > rheight) ? lheight + 1 : rheight + 1;
return height;
}
void test()
{
BNODE nodeA = { 'A', NULL, NULL };
BNODE nodeB = { 'B', NULL, NULL };
BNODE nodeC = { 'C', NULL, NULL };
BNODE nodeD = { 'D', NULL, NULL };
BNODE nodeE = { 'E', NULL, NULL };
BNODE nodeF = { 'F', NULL, NULL };
BNODE nodeG = { 'G', NULL, NULL };
BNODE nodeH = { 'H', NULL, NULL };
nodeA.lchild = &nodeB;
nodeA.rchild = &nodeF;
nodeB.rchild = &nodeC;
nodeC.lchild = &nodeD;
nodeC.rchild = &nodeE;
nodeF.rchild = &nodeG;
nodeG.lchild = &nodeH;
/* 结算叶子结点 */
int num = 0;
countLeafNum(&nodeA, &num);
printf("叶子结点:%d\n", num);
/* 计算深度 */
num = getTreeHeight(&nodeA);
printf("树的高度:%d\n", num);
printf("********************************\n");
}
int main()
{
test();
system("pause");
return 0;
}
递归计算二叉树的深度和叶子结点
最新推荐文章于 2023-04-24 20:21:24 发布