1. 程式人生 > >LintCode:M-不同的二叉查詢樹個數

LintCode:M-不同的二叉查詢樹個數

給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種?

您在真實的面試中是否遇到過這個題?  Yes 樣例

給出n = 3,有5種不同形態的二叉查詢樹:

1           3    3       2      1
 \         /    /       / \      \
  3      2     1       1   3      2
 /      /       \                  \
2     1          2                  3
標籤  卡特蘭數 動態規劃
public class Solution {
    /**
     * @paramn n: An integer
     * @return: An integer
     */
    public int numTrees(int n) {
        
        int[] dp = new int[n+1];
        dp[0]=1;
        return helper(dp, n);
    }
    
//方法一
    //記憶+遞迴
    public int helper(int[] dp, int n) {
        if(dp[n]>0)
            return dp[n];
        
        //每個node做root情況下的種數
        for(int i=1; i<=n; i++){
            dp[i-1] = dp[i-1]>0?dp[i-1]:helper(dp, i-1);
            dp[n-i]= dp[n-i]>0?dp[n-i]:helper(dp, n-i);
            
            dp[n] += dp[i-1]*dp[n-i];
        }
        
        return dp[n];
    } 

//方法二    
    //AC=95%
    //超時
    public int helper_1(int n) {
        if(n==0)
            return 1;
        
        int res=0;
        //每個node做root情況下的種數
        for(int i=1; i<=n; i++){
            int left=helper_1(i-1);
            int right=helper_1(n-i);
            res += left*right;
        }
        
        return res;
    }    
}


相關推薦

LintCodeM-不同查詢個數

給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種? 您在真實的面試中是否遇到過這個題?  Yes 樣例 給出n = 3,有5種不同形態的二叉查詢樹: 1 3 3 2 1 \

Google演算法題M-求搜尋的第K小的數

給出一個二叉搜尋樹,寫出一個方法,求出樹中的第k小的數 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode le

lintcode不同查詢

卡特蘭數 其前幾項為 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845

LintCodeM-查詢中搜索區間

給定兩個值 k1 和 k2(k1 < k2)和一個二叉查詢樹的根節點。找到樹中所有值在 k1 到 k2 範圍內的節點。即列印所有x (k1 <= x <= k2) 其中 x 是二叉查詢樹的中的節點值。返回所有升序的節點值。

不同查詢 II lintcode

給出n,生成所有由1...n為節點組成的不同的二叉查詢樹 您在真實的面試中是否遇到過這個題?  Yes 樣例 給出n = 3,生成所有5種不同形態的二叉查詢樹: 1

不同查詢 II -LintCode

給出n,生成所有由1…n為節點組成的不同的二叉查詢樹 樣例 給出n = 3,生成所有5種不同形態的二叉查詢樹: #ifndef C164_H #define C164_H #include

LintCode-不同查詢

給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種? 樣例 給出n = 3,有5種不同形態的二叉查詢樹: 1 3 3 2 1 \ / / / \ \ 3

lintcode-不同查詢-163

給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種? 您在真實的面試中是否遇到過這個題? 樣例 給出n = 3,有5種不同形態的二叉查詢樹: 1 3 3

【一次過】Lintcode 86. 查詢迭代器

設計實現一個帶有下列屬性的二叉查詢樹的迭代器: next()返回BST中下一個最小的元素 元素按照遞增的順序被訪問(比如中序遍歷) next()和hasNext()的詢問操作要求均攤時間複雜度是O(1) 樣例 對於下列二叉查詢樹,使用迭代器進行中序遍歷的結果為&nbs

演算法導論 第十查詢 筆記(查詢查詢查詢、插入和刪除、隨機構造的查詢

二叉查詢樹是一種樹資料結構,它與普通的二叉樹最大的不同就是二叉查詢樹滿足一個性質:對於樹中的任意一個節點,均有其左子樹中的所有節點的關鍵字值都不大於該節點的關鍵字值,其右子樹中的任意一個節點的關鍵字值都不小於該節點的關鍵字值。 在二叉查詢樹上可以進行搜尋、取最小值、取最大值、取指定節點的前驅

C++查詢實現()——遍歷操作

     建立好二叉樹,有時候我們需要對整個二叉樹錦星遍歷,即輸出二叉樹的所有結點元素。理論上,遍歷的方式有無數種,順序可以自己任意選定,但是絕大部分遍歷方式在實際中並沒有用處,比較有用的的遍歷方式有兩種:廣度優先遍歷、深度優先遍歷。 (1)廣度優先遍歷        

LeetCode題庫解答與分析——#95. 不同查詢 IIUniqueBinarySearchTreeII

Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.For example,Given n = 3, your program should retur

lintcode(95)驗證查詢

描述: 給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST) 一棵BST定義為: 節點的左子樹中的值要嚴格小於該節點的值。節點的右子樹中的值要嚴格大於該節點的值。左右子樹也必須是二叉查詢樹。一個節點的樹也是二叉查詢樹。樣例: 一個例子: 2 / \ 1

LeetCode96不同查詢

題目:給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種?例如,給出 n = 3,則有 5 種不同形態的二叉查詢樹: 1 3 3 2 1 \ / / / \ \

資料機構與演算法查詢(Binary Search Tree)Java實現

個人總結,如有錯誤,感謝指正 二叉查詢樹(Binary Search Tree) 一、簡介 二叉樹(Binary Tree):每個節點最多有兩個子節點的樹。 二叉查詢樹(binary srarch tree):具有如下性質的二叉樹稱為二叉查詢樹

lintcode validate-binary-search-tree 驗證查詢

問題描述 筆記 程式碼1是用到中序遍歷,要求中序遍歷是嚴格的增序。用到了輔助空間。 程式碼2是leetcode上面的解法,用到了prev指標記錄前一個節點,省下了輔助空間,而且要注意prev傳

【LeetCode & 劍指offer刷題】題2查詢查詢、插入、刪除

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 二叉查詢樹的查詢、插入、刪除   1 查詢結點 最佳情況是 O(log­ 2 n),而最壞情況是 O(n)

LintCode 11. 查詢中搜索區間 Python

描述 給定兩個值 k1 和 k2(k1 < k2)和一個二叉查詢樹的根節點。找到樹中所有值在 k1 到 k2 範圍內的節點。即列印所有x (k1 <= x <= k2) 其中 x 是二叉查詢樹的中的節點值。返回所有升序的節點值。 樣例 如果有 k1 = 10 和

LeetCode96_Unique Binary Search Trees(求1到n這些節點可以組成多少種不同查詢) Java題解

題目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a t

LintCode 97 驗證查詢

題目 http://www.lintcode.com/zh-cn/problem/validate-binary-search-tree/ 給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST)