1. 程式人生 > 實用技巧 >96. 不同的二叉搜尋樹-7月15日

96. 不同的二叉搜尋樹-7月15日

題目

96. 不同的二叉搜尋樹

我的思路

很自然想到二叉搜尋樹的根的左右又是兩個二叉搜尋樹,所以以某個值作為總數跟的二叉搜尋樹的種類為它左右兩個子二叉樹的各自種類之乘積。

應該又是動態規劃的思路:1...n為節點組成的二叉搜尋樹的種數K(n)
K(n)=K(n-1)*K(0)+K(n-2)*K(1)+K(n-3)*K(2)+...+K(0)*K(n-1)

我的實現

class Solution {
public:
    int numTrees(int n) {
        int K[n+1];
        K[0]=1;
        for(int i=1;i<=n;i++){
            
int temp = 0; for(int j=0;j<i;j++){ temp = temp + K[j]*K[i-j-1]; } K[i] = temp; } return K[n]; } }; //應該又是動態規劃的思路:1...n為節點組成的二叉搜尋樹的種數K(n) //K(n)=K(n-1)*K(0)+K(n-2)*K(1)+K(n-3)*K(2)+...+K(0)*K(n-1) //K(0)=K(1)=1,K(2)=2 //K(3)=2+1+2=5

時間複雜度:n^2

空間複雜度:n

拓展學習

二叉搜尋樹:

每個節點的左子樹的所有值小於根,右子樹上的所有值大於根;

中序遍歷=升序遍歷;