leetcode熱題100刷題筆記 5

2021-10-24 00:16:01 字數 2361 閱讀 7005

96.不同的二叉搜尋樹

98.驗證二叉搜尋樹

**101.對稱二叉樹

如果用遞迴的方法來寫,此題非常的簡單,是乙個基礎題,要熟悉的是非遞迴的迭代版本,利用棧來求解

資料結構如果學的足夠紮實,就應該知道這是乙個很經典的問題,其實質就是問你,按照1…n的順序入棧,出棧的序列有多少種,其實就是卡特蘭數,只要知道卡特蘭數怎麼算,直接用公式就可以:

判斷一顆樹是否bst,可以分解成幾個小問題:

左子樹是否bst?

右子樹是否bst?

當前節點的值,是否大於左子樹中的所有值,並且小於右子樹中的所有值?

為了解決這個問題,只需要在遞迴判斷左右子樹,並且在遞迴過程中,保留上下界的值。

bst的特徵就是中序遍歷一定是公升序的,很容易想到將其中序遍歷的序列儲存起來判斷是否公升序,但是這樣會帶來額外的儲存空間,實際上沒有必要,因為遍歷時,當前值一定會比上乙個值大,只需要在遍歷的過程中逐個判斷即可,沒必要把整個序列存起來。

而迭代遍歷的過程,可以參考94題。

如圖所示,要判斷一棵樹是不是對稱二叉樹,關鍵在於它的左右子樹是否對稱,左右子樹(設為t1和t2)對稱的條件為:

根節點的值相同

t1的左子樹和t2的右子樹相同,t1的右子樹和t2的左子樹相同

由此就可以寫出**:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

bool

issymmetric

(treenode* root)

};

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

return

true;}

};

leetcode熱題100刷題筆記 2

62.不同路徑 64.最小路徑和 70.爬樓梯 這道題很容易看出來可以用dfs解決,但是其中有乙個容易迷惑的點,就是所謂的 最長路徑 並不一定經過根節點!因此,我們需要在dfs的過程中,對每乙個節點,計算其左子樹的高度l以及右子樹的高度r,那麼以當前節點為起點的路徑,經過的節點的最大值就是l r 1...

熱題HOT 100 簡單題 4 6

53.最大子序和 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解...

熱題HOT 100 簡單題10 12

141.環形鍊錶 給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個...