数据结构与算法--二叉树的深度问题
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法--二叉树的深度问题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
二叉樹的深度
- 題目:輸入一顆二叉樹的根,求該樹的深度。從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)一次進(jìn)過的節(jié)點(diǎn)形成的一條路徑,最長(zhǎng)的路徑的長(zhǎng)度為樹的深度。
- 如下圖中二叉樹的額深度4,因?yàn)閺母?jié)點(diǎn)A到葉子節(jié)點(diǎn)的路徑中有4個(gè)節(jié)點(diǎn)A B E J
- 問題中定義了一種樹深度的計(jì)算規(guī)則,我們根據(jù)這個(gè)定義去得到樹所有的路徑,也就得到了最長(zhǎng)的額路徑。在我們之前的文章:數(shù)據(jù)結(jié)構(gòu)與算法–面試必問AVL樹原理及實(shí)現(xiàn)文章中,我們對(duì)二叉搜索樹的具體實(shí)現(xiàn)方案有詳細(xì)的說明,其中二叉搜索樹平衡條件是左右子樹的高度差不能超過1 ,和我們當(dāng)前要求是一致的,我們借鑒其中高度求值的思路
- 分析
- 二叉樹還是遞歸的思路,既然我們需要求高度差
- 分別遞歸求左右子樹的高度,在求解
- 同二叉樹的后續(xù)遍歷一樣遞歸,只不是現(xiàn)在將遍歷元素值,變?yōu)楝F(xiàn)在遍歷高度并累加
- 遞歸思路,按最簡(jiǎn)單的節(jié)點(diǎn)分析,當(dāng)只有一個(gè)左右子樹,那么遞歸到left 高度0, 遞歸到right 高度0
- 那么此時(shí)根節(jié)點(diǎn)高度 height= Math.max(left + right) + 1
- 經(jīng)如上分析有如下代碼
變種題型-求平衡二叉樹
- 題目:輸入一顆二叉樹的根,判斷該樹是否平衡二叉樹。如果某二叉樹中任意左右節(jié)點(diǎn)的樹深度不超過1 ,那么他就是一顆平衡二叉樹。
- 還是在剛才二叉搜索樹的文中,我們求高度的目的就是需要再平衡二叉樹,使得經(jīng)過修改的二叉樹能夠達(dá)到二叉搜索樹的結(jié)構(gòu)特性。既然在以上方法中我們得到了高度,那么可以在邏輯上修改就能求解本問題
- 分析:
- 通上題中,分別遞歸求解left, right
- 得到left, right高度,求差值 > 1 ,則不是平衡
- 如上分析有如下代碼:
- 以上代碼比較簡(jiǎn)單,但是存在問題是節(jié)點(diǎn)會(huì)被重復(fù)遍歷,當(dāng)遍歷第二層節(jié)點(diǎn) B,C時(shí)候,會(huì)遍歷H I J節(jié)點(diǎn),同樣 遍歷D,E F G時(shí)候還是會(huì)重復(fù)遍歷H I J 節(jié)點(diǎn),類似斐波那契數(shù)量的遞歸求解一樣,重復(fù)的遍歷會(huì)時(shí)間復(fù)雜度指數(shù)級(jí)增長(zhǎng),當(dāng)樹高度越大,重復(fù)遍歷的次數(shù)越多。我們需要找到更優(yōu)方案
每個(gè)節(jié)點(diǎn)遍歷一次解法
- 我們之前是為了求深度,才直接遞歸左右節(jié)點(diǎn),然后在判斷,既然我們都遍歷了求出了深度,那么能不能同時(shí)標(biāo)記每一個(gè)節(jié)點(diǎn)的深度呢
- 分析
- 還是按剛才思路,分別遍歷左右子樹求高度,我們還是按最簡(jiǎn)單的元素來分析遞歸的情況
- 當(dāng)左右子樹都只有一個(gè)節(jié)點(diǎn),遍歷左子樹,left = 1, 遍歷右子樹 right = 1
- 此時(shí)不同的點(diǎn)我們更新當(dāng)前根節(jié)點(diǎn)的高度height = Math.max(left,right) + 1
- 依次遞歸到根節(jié)點(diǎn)
- 以上思路還是二叉樹的后續(xù)遍歷的思想,左右根,一邊遍歷,一邊計(jì)算高度,一邊更新節(jié)點(diǎn)高度信息
- 更新完根的高度后,在判斷是否滿足 left - right > 1,放回對(duì)應(yīng)值,以跳出遞歸
- 如是哪個(gè)分析有如下代碼
- 以上方法后續(xù)遍歷的方式遍歷整個(gè)二叉樹,遍歷同時(shí)求深度,判斷平衡,當(dāng)遍歷到樹根,也就得樹是否平衡的二叉樹。
上一篇:數(shù)據(jù)結(jié)構(gòu)與算法–數(shù)字在排序數(shù)組中出現(xiàn)次數(shù)
下一篇:數(shù)據(jù)結(jié)構(gòu)與算法–數(shù)組中出一次的數(shù)字
總結(jié)
以上是生活随笔為你收集整理的数据结构与算法--二叉树的深度问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 针灸减肥的原理是什么
- 下一篇: 拔火罐一般多少钱一次