一棵樹(shù),每個(gè)節(jié)點(diǎn)有0或2個(gè)孩子,共N個(gè)節(jié)點(diǎn),高度為K,問(wèn)可以組成多少種不同的結(jié)構(gòu)?
假設(shè),當(dāng)前樹(shù)的節(jié)點(diǎn)問(wèn)n,高度為k,那么子樹(shù)可分為3種情況:
- 左子樹(shù)高度為k-1,右子樹(shù)高度為1~k-2
- 右子樹(shù)高度為k-1,左子樹(shù)高度為1~k-2
- 左右子樹(shù)均為k-1
并且,滿(mǎn)足題目要求的樹(shù)的節(jié)點(diǎn)與高度有這樣的關(guān)系:2*k-1 <= n <= 2^k-1,可是根據(jù)這個(gè)關(guān)系枚舉左右子樹(shù)的節(jié)點(diǎn)數(shù)
于是就可以用遞歸+DP的方法解出這道題了。
(在對(duì)n <= 2^k-1進(jìn)行轉(zhuǎn)化時(shí),自己居然寫(xiě)成了k >= log(n+1.0)/log(2.0),其實(shí)應(yīng)該是k >= floor (log(n+1.0)/log(2.0)),還是太粗心啦)