c语言写 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 输入格式 输入二叉树先序序列(以“#”分隔) 输出格式 输出一个整数,表示二叉树深度。 输入输出样例 输入 ABC##DE###FG#H### 输出 4
时间: 2024-09-15 08:13:36 浏览: 50
二叉树的遍历 多项式的加法等等
在 C 语言中,我们可以使用递归的方式来解决这个问题。首先,我们需要定义一个结构体表示二叉树的节点,然后编写一个函数计算树的最大深度。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
char val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 计算树的最大深度
int maxDepth(TreeNode* root) {
if (root == NULL) { // 如果节点为空,返回0
return 0;
} else {
int left_depth = maxDepth(root->left); // 左子树的深度
int right_depth = maxDepth(root->right); // 右子树的深度
// 返回当前节点所在层和更深层之间的较大值
return 1 + (left_depth > right_depth ? left_depth : right_depth);
}
}
int main() {
// 输入二叉树的先序遍历序列字符串
char* preorder_str = "ABC##DE###FG#H###";
char* input = strtok(preorder_str, "#"); // 分割输入字符串
// 创建实际的二叉树并计算深度
TreeNode* root = buildTreeFromPreorder(input);
int depth = maxDepth(root);
printf("最大深度: %d\n", depth);
// 清理内存并释放树
freeTree(&root);
return 0;
}
// 辅助函数,根据先序遍历重建二叉树
TreeNode* buildTreeFromPreorder(char* input) {
// ... 这里需要实现从字符数组构建二叉树的代码,通常会涉及到栈或者递归
// ...
return NULL; // 仅作示例,此处省略了具体的构造过程
}
// 清理二叉树
void freeTree(TreeNode** root) {
if (*root != NULL) {
freeTree(&(*root)->left);
freeTree(&(*root)->right);
free(*root);
*root = NULL;
}
}
```
在这个例子中,`maxDepth` 函数用于递归地计算二叉树的最大深度,而 `buildTreeFromPreorder` 函数用于将给定的先序遍历序列转换成实际的二叉树。注意 `buildTreeFromPreorder` 需要你根据实际情况来实现,因为它通常涉及到栈或递归来建立树。
阅读全文