二叉樹(3)- 進(jìn)階練習(xí)

?? 進(jìn)階練習(xí)

226. 翻轉(zhuǎn)二叉樹(迭代法(用棧、隊列)、遞歸)

589. N 叉樹的前序遍歷

590. N 叉樹的后序遍歷(前序遍歷的逆過程,但有些細(xì)節(jié)需要注意)

101. 對稱二叉樹(迭代法、遞歸)

100. 相同的樹

572. 另一棵樹的子樹

104. 二叉樹的最大深度

559. N 叉樹的最大深度

111. 二叉樹的最小深度

222. 完全二叉樹的節(jié)點個數(shù)(二分查找 + 位運算、廣度優(yōu)先遍歷、迭代)

110. 平衡二叉樹

257. 二叉樹的所有路徑(含回溯)

404. 左葉子之和

112. 路徑總和

113. 路徑總和 II

106. 從中序與后序遍歷序列構(gòu)造二叉樹(熟悉掌握中序遍歷和后序遍歷)

105. 從前序與中序遍歷序列構(gòu)造二叉樹



?? 具體實例分析

1、226. 翻轉(zhuǎn)二叉樹參考

1)問題描述

翻轉(zhuǎn)二叉樹問題描述

2)分析

圖示

3)代碼實現(xiàn)

遞歸效果
遞歸

2、589. N 叉樹的前序遍歷

1)問題描述

n叉樹前序遍歷

2)問題分析

?記住前序遍歷是 中左右,而在迭代過程中,一輪循環(huán)的結(jié)果是“上一層棧元素出?!币约啊霸搶釉剡M(jìn)?!?,結(jié)合前序遍歷的性質(zhì),所以在循環(huán)中讓n叉樹的孩子節(jié)點從右往左進(jìn)棧,這樣在下一輪循環(huán)的出棧中就能保證從左往右的出來的。

3)代碼實現(xiàn)

n叉樹前序遍歷的代碼

3、101. 對稱二叉樹

1)問題描述

對稱二叉樹問題描述

2)分析

用棧依次存儲左右節(jié)點(從兩邊像中間存儲),然后每次出隊兩個節(jié)點進(jìn)行比較

3)代碼實現(xiàn)

代碼實現(xiàn)

?思考:為什么當(dāng)左右兩邊都是NULL的時候,是continue而不是return true;

4、572. 另一棵樹的子樹

1)問題描述

另一棵樹的子樹問題描述

2)分析

?方法一(深度優(yōu)先暴力匹配算法)

s上每個節(jié)點都要進(jìn)行一次和t的匹配判斷
方法一復(fù)雜度分析

代碼實現(xiàn)

深度優(yōu)先暴力算法代碼實現(xiàn)
比較容易看懂的遞歸

5、110. 平衡二叉樹

1)問題分析

平衡二叉樹問題描述

2)分析(參考

自底向上的遞歸算法

3)代碼實現(xiàn)

平衡二叉樹自底向上的代碼實現(xiàn)

6、257. 二叉樹的所有路徑

1)問題分析

二叉樹所有路徑

2)分析(參考

遞歸中隱藏著回溯。

如圖

3)代碼實現(xiàn)

3.1)深度優(yōu)先遍歷方法

深度優(yōu)先遍歷方法
???

3.2)廣度優(yōu)先遍歷方法

我們維護(hù)一個隊列,存儲節(jié)點以及根到該節(jié)點的路徑。一開始這個隊列里只有根節(jié)點。在每一步迭代中,我們?nèi)〕鲫犃兄械氖坠?jié)點,如果它是葉子節(jié)點,則將它對應(yīng)的路徑加入到答案中。如果它不是葉子節(jié)點,則將它的所有孩子節(jié)點加入到隊列的末尾。當(dāng)隊列為空時廣度優(yōu)先搜索結(jié)束,我們即能得到答案。

7、106. 從中序與后序遍歷序列構(gòu)造二叉樹

1)問題描述

構(gòu)造二叉樹問題描述

2)分析

我們都知道后序遍歷的最后一個元素是根節(jié)點,在中序遍歷中,根節(jié)點則劃分左右兩棵子樹。

通過此思想,通過遞歸,更新后序后序遍歷的“根節(jié)點”,通過中序遍歷來給這個“根節(jié)點”找它的左右子樹。

3)代碼實現(xiàn)

8、

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容