給定乙個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種?
示例:
輸入: 3
輸出: 5
解釋:給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
思路:這個題目實際上是乙個數學題,設整數p組成的二叉樹共有c(p)種情況。當給定乙個整數n的時候,我們可以以1, 2, 3,... n分別為根節點。當以k為根節點的時候,它左面有k-1個元素,右面有n-k個元素,組成的二叉樹共有c(k-1)*c(n-k)種,所以對於這個整數n來講,所有的二叉樹的個數re=c(0)*c(n-1) +c(1)*c(n-2) +....+c(k-1)*c(n-k)+...+c(n-1)*c(0)。
class solution
return re;
}};
96 不同的二叉搜尋樹
二叉搜尋樹,又被稱為是二叉查詢樹 二叉排序樹,這種樹其左子樹所有節點的值均小於根節點的值,其右子樹所有節點的值均大於根節點的值,並且其左 右子樹均為二叉搜尋樹。空樹也是二叉搜尋樹。方法一 動態規劃法 這道題可以用動態規劃的思想去解決。由於給定的節點值為1 n,是一組從小到大順序排列的資料,其中,任意...
96 不同的二叉搜尋樹
dp i 代表有 i 個結點 1.i 時候的二叉搜尋樹種數。首先就是要考慮怎麼和之前的dp連線起來,也就是說選擇有幾種。首先可以就直接把 i 這個數放在 i 1 二叉樹的根節點,二叉搜尋樹的種數就是dp i 1 如果把 i 放在左子樹,i 1是根節點,那就有dp 1 dp i 2 左子樹 右子樹 在...
96 不同的二叉搜尋樹
題目.middle tree的定義就是遞迴的,所以關於樹的演算法也多採用遞迴。但是這個遞迴的話存在子問題重複計算的問題,所以用dp更好 package main import fmt type treenode struct func printtree root treenode else fmt...