刷題第十二天
1382. 將二叉搜索樹變平衡:
先將二叉搜索樹中序遍歷獲取有序數(shù)組,再將數(shù)組根據(jù)108的方法轉(zhuǎn)化為平衡二叉樹。

669.?修剪二叉搜索樹:
如果val小于low,說明區(qū)間在右子樹,左子樹以及當前root直接剪掉,遞歸左子樹,如果val在low和high之間,說明需要修剪左右子樹,分別遞歸。

236. 二叉樹的最近公共祖先:
如果root等于p或q,返回root,將p或q向上傳遞。令l為遞歸左子樹,r為遞歸右子樹,如果lr都為null說明root為根的子樹沒有p或q,返回null,如果lr其一不為null,返回不為null的子樹,繼續(xù)向上傳遞,如果lr均不為null,說明pq各在左右子樹,root是最近公共祖先,返回root。
235. 二叉搜索樹的最近公共祖先:
如果root的值小于pq,遞歸右子樹,如果root的值大于pq遞歸左子樹,否則返回root。

77. 組合:
開始回溯!這題遞歸,遞歸參數(shù)多加一個開始下標s,設(shè)置一個path數(shù)組,如果數(shù)組長度等于k,說明這是一個答案,存進結(jié)果集。設(shè)置一個for循環(huán),先將i push進path數(shù)組,從i+1開始遞歸,再pop出path。

216. 組合總和 III:
這題和77有點類似,套用了回溯的模板,嘗試寫了一下,他要組合總和,所以要有一個地方存當前的sum,我一開始想到的是存在path的末尾。這樣終止條件就是path長度為k+1且path.back等于n,遞歸的參數(shù)是k,n和s(從s開始循環(huán))。這樣子做是可以的,但是會有頻繁的push,pop操作,一不小心就錯了。
另外一個思路是,子遞歸時,應(yīng)該遞歸n-i,說明讓子遞歸相加等于n-i就行,這樣做的終止條件是n==0,path長度等于k。

標簽: