2471.js
/** ------------------------------------------------------------------------------
*
* 2471. Minimum Number of Operations to Sort a Binary Tree by Level
* Topics: Tree, BFS
* https://leetcode.com/problems/minimum-number-of-operations-to-sort-a-binary-tree-by-level/?envType=daily-question&envId=2024-12-23
*
------------------------------------------------------------------------------ */
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var minimumOperations = function (root) {
let curr = [root]
let answer = 0
while (curr.length > 0) {
const size = curr.length
const treeLevel = curr.map((node) => node.val)
const sortArr = treeLevel.map((n) => n).sort((a, b) => a - b)
const map = new Map()
for (let i = 0; i < size; i++) {
map.set(sortArr[i], i)
}
for (let i = 0; i < size; i++) {
let j = map.get(treeLevel[i])
while (i != j) {
answer++
let temp = treeLevel[j]
treeLevel[j] = treeLevel[i]
treeLevel[i] = temp
j = map.get(temp)
}
}
let next = []
for (let i = 0; i < size; i++) {
let node = curr[i]
if (node.left) next.push(node.left)
if (node.right) next.push(node.right)
}
curr = next
}
return answer
}