
思路:二叉树的层次遍历
cur_level_size == q.size() 当前层的大小就是当前队列的大小,这一点是逐层操作的关键所在。- 非常模式化的题目,代码要尽量理解记忆。
代码:
/** * 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 cur_level_size = q.size(); int cur_level_max = INT_MIN; // cur_level_size 减到0,意味着一层已经全部读完了 while (cur_level_size--){ TreeNode* node = q.front(); cur_level_max = max(cur_level_max, node->val); q.pop(); if (node->left) { q.push(node->left); } if (node->right) { q.push(node->right); } } res.push_back(cur_level_max); } return res; }};