使用BFS解决二叉树的最大深度(广度)
题目(Leetcode)
- https://leetcode.com/problems/maximum-depth-of-binary-tree/
- https://leetcode.com/problems/maximum-width-of-binary-tree/
数据结构
- 使用队列实现BFS算法
解决方法
1. 最大深度
int maxDepth(TreeNode* root) {
int depth = 0;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
depth++;
int size = q.size();
while (size-- != 0) {
TreeNode* node = q.front();
q.pop();
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
return depth;
}
2. 最大宽度
int widthOfBinaryTree(TreeNode* root) {
queue<pair<TreeNode*, int>> q;
q.push({root, 1});
int width = 0;
while (!q.empty()) {
int size = q.size();
if (size == 1) {
q.push({q.front().first, 1});
q.pop();
}
width = max(width, q.back().second - q.front().second + 1);
while (size--) {
TreeNode* node = q.front().first;
int idx = q.front().second;
q.pop();
if (node->left) q.push({node->left, 2* idx});
if (node->right) q.push({node->right, 2 * idx + 1});
}
}
return width;
}
总结
对于二叉树结构,BFS可以处理有关于深度和广度的问题,并且与DFS递归方法而言在更加简洁明了。