C语言递归计算二叉树的深度和叶子结点的个数实验过程分析
时间: 2023-06-25 13:02:14 浏览: 111
c语言 二叉树应用:创建、递归非递归遍历、计算结点、分支、交换子树
5星 · 资源好评率100%
计算二叉树的深度和叶子结点的个数是二叉树常见的操作之一,本文将介绍如何使用C语言递归实现这两个操作。
1. 计算二叉树的深度
二叉树的深度可以通过递归实现。对于一个二叉树,它的深度等于左右子树深度的较大值加1。
具体步骤如下:
- 如果二叉树为空,则返回0。
- 否则,递归计算左子树的深度,记为left_depth。
- 递归计算右子树的深度,记为right_depth。
- 返回left_depth和right_depth中的较大值加1,即为二叉树的深度。
下面是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
int maxDepth(TreeNode* root) {
if (root == NULL) {
return 0;
}
int left_depth = maxDepth(root->left);
int right_depth = maxDepth(root->right);
return left_depth > right_depth ? left_depth + 1 : right_depth + 1;
}
```
2. 计算二叉树的叶子结点个数
二叉树的叶子结点是指没有子节点的节点。计算二叉树的叶子结点个数可以通过递归实现。对于一个二叉树,它的叶子节点个数等于左子树叶子节点个数和右子树叶子节点个数之和。
具体步骤如下:
- 如果二叉树为空,则返回0。
- 如果二叉树只有一个节点,则返回1。
- 否则,递归计算左子树的叶子节点个数,记为left_count。
- 递归计算右子树的叶子节点个数,记为right_count。
- 返回left_count和right_count之和。
下面是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
int leafCount(TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
int left_count = leafCount(root->left);
int right_count = leafCount(root->right);
return left_count + right_count;
}
```
以上就是用C语言递归计算二叉树的深度和叶子结点个数的实验过程分析。
阅读全文