Skip to content

Commit 2d50533

Browse files
committed
Dec 23
1 parent 083d1b7 commit 2d50533

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
from collections import deque
2+
from typing import Optional
3+
4+
5+
# Definition for a binary tree node.
6+
class TreeNode:
7+
def __init__(self, val=0, left=None, right=None):
8+
self.val = val
9+
self.left = left
10+
self.right = right
11+
12+
13+
class Solution:
14+
def _get_min_swaps(self, level_vals):
15+
swaps = 0
16+
idx_map = {val: idx for idx, val in enumerate(level_vals)}
17+
sorted_vals = sorted(level_vals)
18+
19+
for i in range(len(level_vals)):
20+
if level_vals[i] == sorted_vals[i]:
21+
continue
22+
swaps += 1
23+
cur_pos = idx_map[sorted_vals[i]]
24+
idx_map[level_vals[i]] = cur_pos
25+
level_vals[cur_pos] = level_vals[i]
26+
return swaps
27+
28+
def minimumOperations(self, root: Optional[TreeNode]) -> int:
29+
queue = deque([root])
30+
ops = 0
31+
while queue:
32+
level_vals = [node.val for node in queue]
33+
ops += self._get_min_swaps(level_vals)
34+
queue = [child for node in queue
35+
for child in filter(None, (node.left, node.right))]
36+
return ops
37+
38+
39+
def main():
40+
root = TreeNode(1)
41+
root.left = TreeNode(4)
42+
root.right = TreeNode(3)
43+
root.left.left = TreeNode(7)
44+
root.left.right = TreeNode(6)
45+
root.right.left = TreeNode(8)
46+
root.right.right = TreeNode(5)
47+
root.right.left.left = TreeNode(9)
48+
root.right.right.left = TreeNode(10)
49+
assert Solution().minimumOperations(root) == 3
50+
51+
root = TreeNode(1)
52+
root.left = TreeNode(3)
53+
root.right = TreeNode(2)
54+
root.left.left = TreeNode(7)
55+
root.left.right = TreeNode(6)
56+
root.right.left = TreeNode(5)
57+
root.right.right = TreeNode(4)
58+
assert Solution().minimumOperations(root) == 3
59+
60+
root = TreeNode(1)
61+
root.left = TreeNode(2)
62+
root.right = TreeNode(3)
63+
root.left.left = TreeNode(4)
64+
root.left.right = TreeNode(5)
65+
root.right.left = TreeNode(6)
66+
assert Solution().minimumOperations(root) == 0
67+
68+
69+
if __name__ == '__main__':
70+
main()

2024-12-December-LeetCoding-Challenge/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
| December 20 | [2415. Reverse Odd Levels of Binary Tree](https://leetcode.com/problems/reverse-odd-levels-of-binary-tree/) | Medium | Solved |
2626
| December 21 | [2872. Maximum Number of K-Divisible Components](https://leetcode.com/problems/maximum-number-of-k-divisible-components/) | Hard | Unsolved |
2727
| December 22 | [2940. Find Building Where Alice and Bob Can Meet](https://leetcode.com/problems/find-building-where-alice-and-bob-can-meet/) | Hard | Unsolved |
28-
| December 23 | []() | | |
28+
| December 23 | [2471. Minimum Number of Operations to Sort a Binary Tree by Level](https://leetcode.com/problems/minimum-number-of-operations-to-sort-a-binary-tree-by-level/) | Medium | Solved |
2929
| December 24 | []() | | |
3030
| December 25 | []() | | |
3131
| December 26 | []() | | |
@@ -39,5 +39,5 @@
3939
| Level | Problems | Solved | Unsolved |
4040
| --- | --- | --- | --- |
4141
| Easy | 5 | 5 | 0 |
42-
| Medium | 15 | 9 | 6 |
42+
| Medium | 16 | 10 | 6 |
4343
| Hard | 2 | 0 | 2 |

0 commit comments

Comments
 (0)