513.找樹左下角的值
文檔和視頻講解:代碼隨想錄(programmercarl.com)
狀態(tài):ac
用時(shí):1h
思路:找到最大深度的那一層葉子節(jié)點(diǎn)的最左邊拜银,迭代思路比較簡單殊鞭,就是把層序遍歷每一層,把第一個(gè)遍歷到的節(jié)點(diǎn)的數(shù)字放入一個(gè)變量中即可尼桶。
遞歸思路下操灿,其實(shí)也是遞歸找到最大深度,最左邊的節(jié)點(diǎn)只要保證先遍歷左邊節(jié)點(diǎn)泵督,在每次更新最大深度時(shí)趾盐,肯定都是最左邊的節(jié)點(diǎn)最先遍歷到。無需返回值小腊,參數(shù)需要加上當(dāng)前深度值救鲤。終止條件是在遇到葉子節(jié)點(diǎn)時(shí)更新最大深度和最左節(jié)點(diǎn)。遞歸邏輯就是向下遍歷左右子節(jié)點(diǎn)秩冈,然后回溯本缠。
代碼:
112.?路徑總和??113.路徑總和ii
文檔和視頻講解:代碼隨想錄(programmercarl.com)
狀態(tài):ac(看了題解)
用時(shí):2h
思路:112的遞歸思路,在遞歸的同時(shí)使用計(jì)數(shù)器統(tǒng)計(jì)和漩仙,每次遍歷一個(gè)節(jié)點(diǎn)時(shí)減去左右兒子的值搓茬,當(dāng)?shù)竭_(dá)葉子節(jié)點(diǎn)時(shí),且計(jì)數(shù)器為0的時(shí)候队他,返回true卷仑。遞歸返回值是bool,在遇到合適的路徑的時(shí)候及時(shí)返回麸折,參數(shù)為節(jié)點(diǎn)指針和計(jì)數(shù)器锡凝。終止條件是遇到葉子節(jié)點(diǎn)并且計(jì)數(shù)器為0。
112的迭代思路就是用兩個(gè)棧垢啼,一個(gè)棧用來處理樹的遍歷窜锯,另外一個(gè)用來模擬遞歸的計(jì)數(shù)器。
113的思路和112類似芭析,但是由于要存放路徑锚扎,需要一個(gè)存放path的容器即可。
代碼:
106.從中序與后序遍歷序列構(gòu)造二叉樹馁启、105.從前序與中序遍歷序列構(gòu)造二叉樹
文檔和視頻講解:代碼隨想錄(programmercarl.com)
狀態(tài):ac(看了題解)
用時(shí):2h
思路:后序的最后節(jié)點(diǎn)元素作為中序序列的切割點(diǎn)驾孔,來不斷進(jìn)行中序序列的拆分芍秆,通過遞歸層層分割,大致為以下幾步:
切割中序的到兩邊的序列的長度和后序應(yīng)該切割的兩個(gè)序列的長度應(yīng)該一樣翠勉。
前序和中序構(gòu)造同理妖啥。
代碼:
注:想較于106,多加了一個(gè)hash map存放前序序列每個(gè)元素的索引对碌,省去每次遞歸都要沖頭計(jì)算分割點(diǎn)的索引位置荆虱。