题目描述
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。
示例1:
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
解释:
1
/ \
3 2
/ \ \
5 3 9
示例2:
输入: root = [1,2,3]
输出: [1,3]
解释:
1
/ \
2 3
示例3:
输入: root = [1]
输出: [1]
示例4:
输入: root = [1,null,2]
输出: [1,2]
解释:
1
\
2
示例5:
输入: root = []
输出: []
提示:
二叉树的节点个数的范围是 [0,104]
-231 <= Node.val <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row
解题思路
BFS套路去层次遍历该树。
在每一层的遍历中找出最大的树,并且把它存入数组。
最后返回数组即可。
代码
/**
* 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:
void bfs(TreeNode* root, vector<int> &v){//bfs模板套路
if(root==NULL){//如果根结点为空,直接返回
return ;
}
queue<TreeNode* >q;//队列q用于存放结点数据
q.push(root);//首先将根节点入队
while(!q.empty()){//当队列非空时
int sz=q.size();//每一层的结点个数
int Max=q.front()->val;//在遍历该层之前,设定一个Max最大值,用于在当前一层遍历结束后返回,初始值设为该层的第一个元素
while(sz>0){//遍历该层
TreeNode* p=q.front();//
q.pop();
Max=max(Max, p->val);//在当前层中找到最大的结点
if(p->left!=NULL){
q.push(p->left);
}
if(p->right!=NULL){
q.push(p->right);
}
sz--;
}
v.push_back(Max);//当前层遍历结束之后,当前层的最大值push到我们的结果数组中
}
}
vector<int> largestValues(TreeNode* root) {
vector<int> res;//定义的结果数组
bfs(root,res);//bfs扫一遍树,并且把我们要的结果存入res数组中
return res;//返回res数组
}
};