题目描述 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 输入格式 输入二叉树先序序列(以“#”分隔) 输出格式 输出一个整数,表示二叉树深度。
时间: 2024-09-11 18:16:22 浏览: 56
题目要求你编写一个程序来计算给定二叉树的最大深度。二叉树的最大深度定义为从根节点到最远叶子节点的最长路径中的节点数量,其中叶子节点是没有子节点的节点。这个深度可以通过递归的方式来求解,具体步骤如下:
1. **递归基础**:如果输入为空或树只有一个节点,那么深度就是1。
2. **递归逻辑**:对于非空树,遍历左子树和右子树,分别计算它们的最大深度,然后取两个子树深度中的较大值加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) {
// 如果根节点为空,返回0
if (root == NULL) return 0;
// 递归计算左右子树的最大深度
int left_depth = maxDepth(root->left);
int right_depth = maxDepth(root->right);
// 返回当前节点深度,即左右子树最大深度加上1
return (left_depth > right_depth ? left_depth : right_depth) + 1;
}
int main() {
char input[100]; // 先序序列字符串
scanf("%s", input); // 输入先序序列
// 将输入字符串分割成数组并构建二叉树
TreeNode* root = buildTreeFromPreorder(input, &input);
// 计算并输出最大深度
int depth = maxDepth(root);
printf("The maximum depth of the binary tree is %d.\n", depth);
// 清理内存
freeNode(root);
return 0;
}
// 辅助函数:根据先序遍历构建二叉树
TreeNode* buildTreeFromPreorder(char* preorder[], int* p) {
// 如果指针超过输入结束,说明已经到达叶子节点
if (*p >= strlen(preorder)) return NULL;
// 提取当前节点值
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = atoi(preorder[*p++]);
// 递归构建左右子树
node->left = buildTreeFromPreorder(preorder, p);
node->right = buildTreeFromPreorder(preorder, p);
return node;
}
// 辅助函数:释放二叉树内存
void freeNode(TreeNode* root) {
if (root == NULL) return;
freeNode(root->left);
freeNode(root->right);
free(root);
}
```
在这个例子中,`maxDepth` 函数负责计算最大深度,`buildTreeFromPreorder` 和 `freeNode` 是辅助函数,用于处理输入的先序序列并清理动态分配的内存。
阅读全文