目录
一、BFS遍历一棵二叉树(模板)
102. 二叉树的层序遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> q;//利用队列进行二叉树的层序遍历
if(root!=nullptr) q.push(root);//根节点判空,防止下边出现空指针错误
vector<vector<int>> res;//内层 vector<int> 一个一个地收集当前层的每一个元素
while(!q.empty())
{
int size = q.size();//队列此时的长度也就是当前层的宽度
vector<int> vec;
for(int i=0;i<size;i++)
{
TreeNode *t = q.front();//取出队头元素
q.pop();//抛出队头
vec.push_back(t->val);//收集
if(t->left!=nullptr) q.push(t->left);//左子树不空,左子树入队
if(t->right!=nullptr) q.push(t->right);//右子树不空,右子树入队
}
res.push_back(vec);//将该层所有元素收集
}
return res;
}
};
二、求二叉树的最大深度
104. 二叉树的最大深度
- 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
- 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数后者节点数(取决于高度从0开始还是从1开始)
- 根节点的高度就是二叉树的最大深度
DFS
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root==nullptr)
{
return 0;
}
int max1= maxDepth(root->left)+1;
int max2= maxDepth(root->right)+1;
return max1>max2 ? max1:max2;
}
};
BFS
class Solution {
public:
int maxDepth(TreeNode* root) {
queue<TreeNode*> q;
if(root!=nullptr)
{
q.push(root);
}
int d=0;
while(!q.empty())
{
int size = q.size();
for(int i=0;i<size;i++)
{
TreeNode *t = q.front();
q.pop();
if(t->left!=nullptr) q.push(t->left);
if(t->right!=nullptr) q.push(t->right);
}
d++;
}
return d;
}
};
总结
树的相关题目总是以先序、后序、中序、层序(BFS)为基础,要牢牢掌握这几种遍历方式。