🔗 leetcode.com/problems/mi…
题目
- 给一个二叉树,进行若干交换操作,使得每层的数字都是严格升序的
- 返回至少要进行几次这样的操作
思路
- 队列,按照层级遍历
- 针对每一层,统计至少要经过几次交换的操作,可以严格升序
- 交换操作用贪心的方法:当前位置的数据是否是排序后所处的位置,若不是,经过一次交换,把当前的元素,交换至排序后所处的位置
代码
/**
* 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:
int minimumOperations(TreeNode* root) {
int count = 0
queue<TreeNode*> que
que.push(root)
while (!que.empty()) {
int size = que.size()
vector<int> vec1, vec2
while (size--) {
auto* node = que.front()
vec1.push_back(node->val)
vec2.push_back(node->val)
if (node->left) que.push(node->left)
if (node->right) que.push(node->right)
}
sort(vec2.begin(), vec2.end())
unordered_map<int, int> mp
for (int i = 0
mp[vec2[i]] = i
}
for (int i = 0
while (mp[vec1[i]] != i) {
count++
swap(vec1[i], vec1[mp[vec1[i]]])
}
}
}
return count
}
}