3 回答

TA貢獻(xiàn)1826條經(jīng)驗 獲得超6個贊
如果樹向右或向左傾斜,例如如果每個節(jié)點(diǎn)只有一個右子節(jié)點(diǎn),那么遞歸很容易導(dǎo)致計算器溢出(再次取決于堆棧設(shè)置),不確定輸入之一是否具有您的情況。
這可以以迭代方式完成:
a) 將所有父項(數(shù)組中的值)添加到 HashSet
b) 然后遍歷所有節(jié)點(diǎn)(這里只是從 0 到 n 的索引),看看它是否存在于集合中,如果不存在,它就是一片葉子。
c) 然后從葉子遍歷到根來獲取高度,同時將每個節(jié)點(diǎn)的高度存儲在數(shù)組中,這樣下次您就不必再次爬上相同的路徑。
d) 每次更新最大高度。

TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊
在現(xiàn)實生活中,只有當(dāng)你知道深度被限制在一個很小的值時,你才應(yīng)該使用遞歸。
例如,遞歸地測量一棵平衡樹很好,但遞歸地測量一棵不平衡樹就不行了。

TA貢獻(xiàn)1834條經(jīng)驗 獲得超8個贊
您遇到堆棧溢出錯誤似乎很奇怪,我假設(shè)這是一個如此簡單的問題;當(dāng)它是一棵非常大的樹或者您出于某種原因在它期間加載大量 RAM 時,這只會成為遞歸的問題。我建議你發(fā)布你的代碼。
至于增加堆棧大小,這不是問題,因為您只是在做練習(xí)題。然而,在現(xiàn)實世界中,這可能會帶來挑戰(zhàn),并且是使用遞歸的風(fēng)險之一。如果您在各種設(shè)備上使用您的應(yīng)用程序,由于設(shè)備的限制,增加堆棧大小可能并不總是可行的。相反,我建議您盡可能避免使用遞歸,除非您知道要遞歸的樹足夠小而不會導(dǎo)致溢出。
添加回答
舉報