515. 在每个树行中找最大值
/**
* 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) {
/// <层数,值>
unordered_map<int, int> m;
/// <层数,节点指针>
queue<pair<int, TreeNode*>> q;
/// 如果根非空,将根节点入队
if (root)
q.push({1, root});
///如果队列不空,开始层次遍历
while(!q.empty())
{
/// 取出队头元素
pair<int, TreeNode*> u = q.front();
/// 队头元素出队
q.pop();
/// 如果左右子子节点不空,入队
if (u.second->left)
q.push({u.first + 1, u.second->left});
if (u.second->right)
q.push({u.first + 1, u.second->right});
/// 如果这一层已经有节点在哈希表中
if (m.find(u.first) != m.end())
{
/// 判断是否为最大值
if (m.find(u.first)->second < u.second->val)
/// 如果不为最大值,替换
m.find(u.first)->second = u.second->val;
}
else
{
/// 否则将这一层的值插入哈希表中
m.insert({u.first, u.second->val});
}
}
/// 将哈希表中的数据存储至vector中
vector<pair<int, int>> temp;
for (auto x : m)
{
temp.push_back(x);
}
/// 排序
sort(temp.begin(), temp.end());
/// 将vector<pair>中的值取出
vector<int> ret;
for (auto x : temp)
{
ret.push_back(x.second);
}
return ret;
}
};