c语言写 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 输入格式 输入二叉树先序序列(以“#”分隔) 输出格式 输出一个整数,表示二叉树深度。 输入输出样例 输入 ABC##DE###FG#H### 输出 4
时间: 2024-09-15 12:13:37 浏览: 45
在 C 语言中,可以使用递归的方式来解决这个问题。首先,我们需要定义一个结构体 `Node` 来表示二叉树的节点,包含左右子节点和数据值。接下来编写函数 `maxDepth`,它接收一个指向根节点的指针作为参数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct Node {
char data;
struct Node* left, *right;
} Node;
// 计算给定二叉树的最大深度
int maxDepth(Node* root) {
if (root == NULL) // 如果根节点为空,返回0
return 0;
else {
// 左右子树深度加一,然后取较大者
int left_depth = maxDepth(root->left);
int right_depth = maxDepth(root->right);
// 返回当前节点的深度(根节点自身计为1)
return 1 + (left_depth > right_depth ? left_depth : right_depth);
}
}
// 主函数用于读入输入并计算最大深度
int main() {
char input[100];
scanf("%s", input); // 输入二叉树的先序遍历序列
// 将输入字符串转化为二叉树结构
Node* root = createTreeFromPreorder(input);
// 计算最大深度
int depth = maxDepth(root);
printf("最大深度: %d\n", depth);
freeTree(root); // 释放内存
return 0;
}
// 辅助函数将先序遍历序列转换为二叉树
Node* createTreeFromPreorder(char* preorder) {
// 这里需要根据输入字符串解析生成实际的二叉树,这里仅作示例,实际应用需自行实现
// 具体实现会涉及栈的操作,将 'A', 'B', 'C', ... 分别分配给新创建的节点,并链接它们
//...
return NULL; // 示例中略去这个部分
}
// 释放二叉树节点的内存
void freeTree(Node* root) {
if (root != NULL) {
freeTree(root->left);
freeTree(root->right);
free(root);
}
}
```
在这个程序中,我们首先从输入的先序遍历序列构建二叉树,然后递归地计算每个节点的左子树和右子树的最大深度,最后返回整个树的最大深度。
阅读全文