用递归函数求二叉树宽度
时间: 2024-10-19 12:09:59 浏览: 54
要使用递归函数计算二叉树的最大宽度(即节点数最多的层),你可以采用一种叫做“层次遍历”的方法,结合深度优先搜索(DFS)。在二叉树的每一层上,我们可以同时访问左子树和右子树的节点,然后记录下当前层的节点数量,取最大值即为树的最大宽度。
下面是递归算法的基本思路:
1. 如果二叉树为空,则宽度为0;
2. 否则,分别计算左右子树的宽度;
3. 取左右子树宽度中的较大值,再加上根节点,得到当前层的宽度;
4. 返回当前层宽度和整个树的最大宽度两者之间的较大值。
以下是一个C++实现的例子:
```cpp
#include <vector>
// 定义二叉树结点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 递归函数计算宽度
int widthOfBinaryTree(TreeNode* root) {
if (root == nullptr) return 0; // 空树的情况
// 记录当前层的最大宽度
int layerWidth = std::max({widthOfBinaryTree(root->left), widthOfBinaryTree(root->right)});
// 当前层包含根节点,所以加上1
layerWidth = std::max(layerWidth, 1);
// 更新整个树的最大宽度
int maxWidth = std::max(maxWidth, layerWidth);
return maxWidth;
}
```
阅读全文