一般來說,只要涉及到二叉樹或二叉搜尋樹的,基本都要用到根結點和遞迴的思想。對於本題來說,假設要求的結果為f(n),那麼開始分析:由1到n節點組成的二叉搜尋樹的根結點總共有n種取值情況,即1,2...n分別作為根結點,當1作為根結點時,其左子樹為空記為f(0),右子樹為2到n總共n-1個節點組成的二叉搜尋樹,且這n-1個節點總共有f(n-1)種組成情況,因此,以1為根結點時,總共有f(0)*f(n-1)種不同的二叉搜尋樹(令f(0)=1);同理,以2為根結點時,左子樹只有1這乙個節點,所以f(1)=1,總共有f(1)*f(n-2)種組成情況。。。,很明顯是遞迴的過程。最終的結果表示式為:f(n) = f(0)*f(n-1)+f(1)*f(n-2)+...+f(n-1)*f(0)。
public int numtrees(int n)
int res = 0;
if(map.containskey(n))else
}return g[n];
}
卡特蘭數是組合數學中乙個常出現在各種計數問題中的數列。其滿足如下條件:f(0) = 1,f(1) = 1,f(n) = f(0)*f(n-1)+f(1)*f(n-2)+...+f(n-1)*f(0)。通過分析可知,此題就是乙個卡特蘭數列求第n項的問題。而卡特蘭數列的另乙個遞推公式為:f(n)=f(n-1)*(4*n-2)/(n+1),因此可以直接根據遞推公式迭代求解。
public int numtrees(int n)
return (int) res;
}
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 ...