递归求二叉树的宽度c代码
时间: 2024-11-16 20:14:07 浏览: 25
递归求解二叉树的最大宽度(每个层的最大节点数)通常可以采用队列的数据结构,因为我们需要按照层次顺序遍历。这里有一个简单的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 计算二叉树最大宽度的辅助函数
int widthHelper(TreeNode* root, int level, int maxLevelWidth) {
if (root == NULL) return 0;
// 如果当前层的第一个节点,更新maxLevelWidth
if (level == 0) maxLevelWidth = 1;
// 遍历左、右子节点,同时记录下一层可能的最大宽度
int leftWidth = widthHelper(root->left, level + 1, 0);
int rightWidth = widthHelper(root->right, level + 1, 0);
// 返回当前层宽度加上两子节点宽度较大的那一个
return max(maxLevelWidth, leftWidth + rightWidth);
}
// 主函数计算二叉树的最大宽度
int maxTreeWidth(TreeNode* root) {
if (root == NULL) return 0;
return widthHelper(root, 0, 0);
}
int main() {
// 创建一个示例二叉树并填充数据
// ...
TreeNode* tree = ...; // 你的实际二叉树指针
int maxWidth = maxTreeWidth(tree);
printf("The maximum width of the binary tree is %d.\n", maxWidth);
return 0;
}
```
在这个代码中,`widthHelper` 函数是一个递归函数,它接收一个根节点、当前层级和已经找到的最大宽度作为输入。如果遇到空节点,则返回0;否则,分别计算左右子树的宽度,并更新全局最大的宽度。
阅读全文