使用先序遍历求二叉树的最小深度C语言代码求解
时间: 2024-12-29 19:31:44 浏览: 12
在C语言中,我们可以使用递归的方式来实现先序遍历并找到二叉树的最小深度。最小深度即为最短路径从根节点到叶子节点的数量。以下是简单的C代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 计算二叉树的最小深度
int minDepth(TreeNode* root) {
// 如果树为空,则返回0
if (root == NULL) return 0;
// 如果只有左子树,递归处理左子树
if (root->right == NULL) {
return 1 + minDepth(root->left);
}
// 如果只有右子树,递归处理右子树
if (root->left == NULL) {
return 1 + minDepth(root->right);
}
// 如果左右子树都有,取两个子树中最浅的那个加1作为当前的高度
return 1 + MIN(minDepth(root->left), minDepth(root->right));
}
// 辅助函数,用于比较两个整数的最小值
#define MIN(a, b) ((a) < (b) ? (a) : (b))
// 测试代码
int main() {
// 创建一个示例二叉树
TreeNode* tree = (TreeNode*)malloc(sizeof(TreeNode));
tree->val = 3;
tree->left = (TreeNode*)malloc(sizeof(TreeNode));
tree->left->val = 9;
tree->left->left = (TreeNode*)malloc(sizeof(TreeNode));
tree->left->left->val = 20;
tree->left->right = (TreeNode*)malloc(sizeof(TreeNode));
tree->left->right->val = 15;
tree->right = (TreeNode*)malloc(sizeof(TreeNode));
tree->right->val = 7;
tree->right->left = (TreeNode*)malloc(sizeof(TreeNode));
tree->right->left->val = 10;
int depth = minDepth(tree);
printf("The minimum depth of the binary tree is %d.\n", depth);
free(tree); // 清理内存
return 0;
}
```
阅读全文