?? 進(jìn)階練習(xí)
226. 翻轉(zhuǎn)二叉樹(迭代法(用棧、隊列)、遞歸)
590. N 叉樹的后序遍歷(前序遍歷的逆過程,但有些細(xì)節(jié)需要注意)
101. 對稱二叉樹(迭代法、遞歸)
222. 完全二叉樹的節(jié)點個數(shù)(二分查找 + 位運算、廣度優(yōu)先遍歷、迭代)
257. 二叉樹的所有路徑(含回溯)
106. 從中序與后序遍歷序列構(gòu)造二叉樹(熟悉掌握中序遍歷和后序遍歷)
?? 具體實例分析
1)問題描述

2)分析




1)問題描述

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

1)問題描述

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

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

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




1)問題分析

2)分析(參考)


1)問題分析

2)分析(參考)
遞歸中隱藏著回溯。

3)代碼實現(xiàn)
3.1)深度優(yōu)先遍歷方法



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



1)問題描述

2)分析
我們都知道后序遍歷的最后一個元素是根節(jié)點,在中序遍歷中,根節(jié)點則劃分左右兩棵子樹。
通過此思想,通過遞歸,更新后序后序遍歷的“根節(jié)點”,通過中序遍歷來給這個“根節(jié)點”找它的左右子樹。


8、