以这个图展示叶子节点的求取
项目结构
项目代码截图:使用递归的方式求取二叉树的叶子节点(递归指的是函数自己调用自己的过程)
具体代码展示
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
// 二叉树的节点
typedef struct BINARYNODE {
// 数据
char ch;
// 二叉树的左节点
struct BINARYNODE* lchild;
// 二叉树的右节点
struct BINARYNODE* rchild;
}BinaryNode;
// 使用递归的方式求叶子节点数目
void CalculateLeafNum(BinaryNode* root,int* leafNum) {
// 使用递归的方式求取每一个节点:所谓的递归指的就是函数自己调用自己的过程
if (root == NULL) {
return;
}
if (root->lchild == NULL && root->rchild == NULL) {
(*leafNum)++;
}
// 左子树叶子节点的数目
CalculateLeafNum(root->lchild, leafNum);
// 右子树叶子节点的数目
CalculateLeafNum(root->rchild, leafNum);
}
void CresteBinaryTree() {
// 将节点创建出来
BinaryNode node1 = { 'A',NULL,NULL};
BinaryNode node2 = { 'B',NULL,NULL };
BinaryNode node3 = { 'C',NULL,NULL };
BinaryNode node4 = { 'D',NULL,NULL };
BinaryNode node5 = { 'E',NULL,NULL };
BinaryNode node6 = { 'F',NULL,NULL };
BinaryNode node7 = { 'G',NULL,NULL };
BinaryNode node8 = { 'H',NULL,NULL };
// 建立节点之间的关系
node1.lchild = &node2;
node1.rchild = &node6;
node2.rchild = &node3;
node3.lchild = &node4;
node3.rchild = &node5;
node6.rchild = &node7;
node7.lchild = &node8;
int leafNum = 0;
CalculateLeafNum(&node1, &leafNum);
printf("叶子节点的数目:%d\n", leafNum);
}
int main()
{
CresteBinaryTree();
system("pause");
return 0;
}
运行结果展示:求得该二叉树的叶子节点数为3