求解二叉树的宽度用c递归实现
时间: 2024-12-10 18:12:04 浏览: 20
要计算二叉树的宽度,可以使用递归的方法。二叉树的宽度是指二叉树所有层中节点数的最大值。我们可以通过递归遍历二叉树,记录每一层的节点数,并更新最大宽度来实现。
以下是一个使用C语言递归实现计算二叉树宽度的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 创建新节点
struct TreeNode* createNode(int val) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 计算二叉树宽度的递归函数
int getMaxWidth(struct TreeNode* root, int level, int* maxWidth) {
if (root == NULL) {
return 0;
}
// 更新当前层的节点数
*maxWidth = (*maxWidth > level) ? *maxWidth : level;
// 递归遍历左子树和右子树
getMaxWidth(root->left, level + 1, maxWidth);
getMaxWidth(root->right, level + 1, maxWidth);
return *maxWidth;
}
// 计算二叉树宽度的辅助函数
int getWidth(struct TreeNode* root) {
int maxWidth = 0;
return getMaxWidth(root, 1, &maxWidth);
}
// 主函数示例
int main() {
// 创建示例二叉树
struct TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
// 计算并打印二叉树宽度
printf("The maximum width of the binary tree is %d\n", getWidth(root));
return 0;
}
```
在这个示例中,我们定义了一个二叉树节点结构`TreeNode`,并实现了创建新节点的函数`createNode`。然后,我们编写了递归函数`getMaxWidth`来计算二叉树的宽度,并通过辅助函数`getWidth`来调用它。最后,在`main`函数中,我们创建了一个示例二叉树,并计算和打印了其宽度。
阅读全文