前往
大廳
主題

LeetCode - 0958. Check Completeness of a Binary Tree 解題心得

Not In My Back Yard | 2024-02-15 12:00:01 | 巴幣 0 | 人氣 46

題目連結:


題目意譯:
給定一棵二元樹的根節點 root,請判斷其是否為一個完全二元樹。

在一棵完全二元樹中,除了最後一層以外的每一階層都是滿的,而且最後一層的節點盡可能地靠左側。在層數為 h 的最後一層可以有 1(含)到 2 ^ h(含)個節點。

限制:
在樹中的節點數位於範圍 [1, 100]。
1 ≦ Node.val ≦ 1000



範例測資:
範例 1:
輸入: root = [1,2,3,4,5,6]
輸出: true
解釋: 在最後一層之前的每一層都是滿的(即,有著節點值 {1} 和 {2, 3} 的階層),而最後一層({4, 5, 6})的節點盡可能地靠左。

範例 2:
輸入: root = [1,2,3,4,5,null,7]
輸出: false
解釋: 有著數值 7 的節點並沒有盡可能地靠左。


解題思維:
這題的精神來將樹中的節點編號即可。可以先找出最後一層「最右側」的節點來決定最大的編號為何。可以看到如果編號太大(例如說 2 ^ 15 以上之類的)就可以直接得出該樹並非完全二元樹的結論了,因為題目給定的節點數並不夠讓完全二元樹長到這麼多層。

有了最大編號之後(稱其為 C),就掃過一次整棵樹來計算每一個節點的編號(建議使用深度優先搜尋(Depth First Search,DFS),儲存的資訊會比較少)。然後看是否編號 1 ~ C 都有出現過。如果有,則代表這棵樹是完全二元樹;反之則不是。




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

創作回應

更多創作