題目連結(jié):
題目意譯:
給定一棵二元樹的根節(jié)點 root,請判斷其是否為一個完全二元樹。
在一棵
完全二元樹中,除了最後一層以外的每一階層都是滿的,而且最後一層的節(jié)點盡可能地靠左側(cè)。在層數(shù)為 h 的最後一層可以有 1(含)到 2 ^ h(含)個節(jié)點。
限制:
在樹中的節(jié)點數(shù)位於範圍 [1, 100]。
1 ≦ Node.val ≦ 1000
範例測資:
範例 1:
輸入: root = [1,2,3,4,5,6]
輸出: true
解釋: 在最後一層之前的每一層都是滿的(即,有著節(jié)點值 {1} 和 {2, 3} 的階層),而最後一層({4, 5, 6})的節(jié)點盡可能地靠左。
範例 2:
輸入: root = [1,2,3,4,5,null,7]
輸出: false
解釋: 有著數(shù)值 7 的節(jié)點並沒有盡可能地靠左。
解題思維:
用
這題的精神來將樹中的節(jié)點編號即可。可以先找出最後一層「最右側(cè)」的節(jié)點來決定最大的編號為何。可以看到如果編號太大(例如說 2 ^ 15 以上之類的)就可以直接得出該樹並非完全二元樹的結(jié)論了,因為題目給定的節(jié)點數(shù)並不夠讓完全二元樹長到這麼多層。
有了最大編號之後(稱其為 C),就掃過一次整棵樹來計算每一個節(jié)點的編號(建議使用深度優(yōu)先搜尋(Depth First Search,DFS),儲存的資訊會比較少)。然後看是否編號 1 ~ C 都有出現(xiàn)過。如果有,則代表這棵樹是完全二元樹;反之則不是。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。