您需要在二叉树的每一行中找到最大的值。
示例 1:

Input: root = [1,3,2,5,3,null,9]Output: [1,3,9]
示例 2:
Input: root = [1,2,3]Output: [1,3]
示例 3:
Input: root = [1]Output: [1]
示例 4:
Input: root = [1,null,2]Output: [1,2]
示例 5:
Input: root = []Output: []
提示:
- -2 ≤
Node.val≤ 2 - 1 - The number of nodes in the tree will be in the range
[0, 104].
思路
广度优先遍历的基础题。维护一个队列,按照以下步骤走:
- 把
root塞进队列; - 把
root弹出队列,并把和root相邻的节点塞进队列;被弹出队列的节点,意味着我们已经访问它了; - 每一层的元素由一个向量
vector<int> cur_layer来记录,遍历完一层的元素,找到最大值,push进答案向量中; - 当队列为空时,意味着所有的节点都访问过了,我们就退出,返回答案。
代码
/*** 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> ans;if( nullptr == root ) return ans;if( root->left == nullptr && root->right == nullptr ) {ans.emplace_back( root->val );return ans;}queue<TreeNode*> Q;Q.push( root );while( !Q.empty() ) {int walk_length = Q.size();vector<int> cur_layer;for(int i = 0; i < walk_length; i++) {TreeNode* cur_node = Q.front();Q.pop();cur_layer.emplace_back( cur_node->val );if( cur_node->left != nullptr ) Q.push( cur_node->left );if( cur_node->right != nullptr ) Q.push( cur_node->right );}ans.emplace_back( *max_element( cur_layer.begin(), cur_layer.end() ) );}return ans;}};
