递归计算二叉树的深度和叶子结点

#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;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值