描述
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。
示例1:
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
示例2:输入: root = [1,2,3]
输出: [1,3]提示:
二叉树的节点个数的范围是 [0,104]
-231 <= Node.val <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-largest-value-in-each-tree-row
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
C++代码
层序遍历,取每一层的最大值
/**
* 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<int> largestValues(TreeNode* root) {
vector<int> res; // 存放结果
if(!root) return res; //如果根节点为空,则直接返回结果向量
queue<TreeNode*> q; //定义队列,初始值为根节点
q.push(root);
while(!q.empty()){ //循环直到队列为空
int n = q.size();
int maxValue = INT_MIN; //取每一层的最大值
for(int i=0; i<n; i++){ //遍历该层中的每个节点
auto node = q.front();
q.pop();
maxValue = node->val > maxValue ? node->val : maxValue;
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
res.push_back(maxValue);
}
return res;
}
};
Python代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def largestValues(self, root: Optional[TreeNode]) -> List[int]:
res = [] # 保存结果
if not root:
return res
q = [root] # 定义队列,初始值为根节点
while q:
n = len(q)
tem_list = [] # 用于存放每一层的所有节点值
for _ in range(n):
node = q.pop(0)
tem_list.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
res.append(max(tem_list)) # 找出最大值
return res