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