LeetCode 96 不同的二叉搜尋樹

2021-10-10 02:40:41 字數 796 閱讀 3050

題目

給定乙個整數 n,求以 1 … n 為節點組成的二叉搜尋樹有多少種?

示例

輸入: 3

輸出: 5

解釋:給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:

1 3 3 2 1

\ / / / \

3 2 1 1 3 2

/ / \

2 1 2 3

解題思路

假定我們要求的樹的數量由函式f給出

首先定義f(0)=1f(1)=1

列舉 i = 1 … n 作為搜尋樹的根節點,根節點不同的二叉搜尋樹一定是不同的兩棵二叉搜尋樹。

將1 … i-1 作為根節點的左子樹,將i+1 … n作為根節點的右子樹。(搜尋樹的數量只與結點數量有關,與節點中值的大小無關)所以這樣左子樹一共可以有**f(i-1)棵,右子樹一共可以有f(n-i)棵,所以,根節點為i的二叉搜尋樹的數量一共有f(i-1)*f(n-i)**棵。

演算法1(c語言)(遞迴):

int

numtrees

(int n)

可是顯然,遞迴演算法效率過低,tle了。

演算法2(c語言)(dp):

int

numtrees

(int n)

leetcode 96 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3n 0 表示,有0個點,那麼,可以組成的二叉查詢樹就乙個,那就是空樹 n 1表示,有1個點,那麼...

Leetcode 96 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3主要參考 本題其實是構造卡特蘭數的應用,採用動態規劃思想求解。通過求解出子問題來實現最終問題的求...

leetcode96 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3 我們把n 0 時賦為1,因為空樹也算一種二叉搜尋樹,假設n個節點存在二叉排序樹的個數是g n ...