前往
大廳
主題

LeetCode - 2471. Minimum Number of Operations to Sort a Binary Tree by Level 解題心得

Not In My Back Yard | 2023-10-12 12:00:01 | 巴幣 0 | 人氣 66

題目連結:


題目意譯:
你被給定一棵二元樹的根節點 root,並而其節點值彼此相異。

在一次操作中,你可以選擇在同一個階層上的任兩個節點並交換它們的數值。

回傳最少所需的操作數使得每一層的數值按照嚴格遞增的順序排序。

一個節點的階層值為根節點到它之間的路徑上經過的邊數。

限制:
樹中之節點數位於範圍 [1, 10 ^ 5] 中。
1 ≦ Node.val ≦ 10 ^ 5
樹中所有數值彼此相異。



範例測資:
範例 1:
輸入: root = [1,4,3,7,6,8,5,null,null,null,null,9,null,10]
輸出: 3
解釋:
- 交換 4 和 3。第二層變成了 [3,4]。
- 交換 7 和 8。第三層變成了 [5,6,8,7]。
- 交換 8 和 9。第三層變成了 [5,6,7,8]。
我們使用了 3 次操作,所以回傳 3。
可以證明 3 為最少所需操作數。

範例 2:
輸入: root = [1,3,2,7,6,5,4]
輸出: 3
解釋:
- 交換 3 和 2。第二層變成了 [2,3]。
- 交換 7 和 4。第三層變成了 [4,6,5,7]。
- 交換 6 和 5。第三層變成了 [4,5,6,7]。
我們使用了 3 次操作,所以回傳 3。
可以證明 3 為最少所需操作數。

範例 3:
輸入: root = [1,2,3,4,5,6]
輸出: 0
解釋: 每一層已經按遞增之順排序了,所以回傳 0。


解題思維:
首先,把每一層找出來(參見這題)。

接著,對於每一個階層複製一份位於該層中的節點值並排序。然後與現在階層的節點值做比較來看看需要多少次交換才能變成排序後的樣子(直接交換看看即可,因為每一個數值彼此相異。所以它們最終必定落在屬於自己的位置不會與其他節點混淆)。

最後把所有所需交換次數加總即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作