国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[Leetcode] Unique Binary Search Trees 唯一二叉搜索樹

enrecul101 / 1020人閱讀

摘要:而根可以選擇從到的任意的數(shù),唯一二叉樹的總數(shù),就是根為到的樹相加。所以該問題化簡為以為根,其唯一左子樹和右子樹各有多少,這就是個動態(tài)規(guī)劃的問題了。

Unique Binary Search Trees I && II 解法請見:https://yanjia.li/zh/2019/02/...

Given n, how many structurally unique BST"s (binary search trees) that store values 1...n?

For example, Given n = 3, there are a total of 5 unique BST"s.

   1         3     3      2      1
           /     /      /       
     3     2     1      1   3      2
    /     /                        
   2     1         2                 3
動態(tài)規(guī)劃 復(fù)雜度

時間 O(N!) 空間 O(N)

思路

二叉搜索樹有個性質(zhì),就是左邊的數(shù)都比根小,右邊的數(shù)都比根大。另外,題目說明二叉樹的節(jié)點(diǎn)是從1到n,所以我們能確定如果根為k,則根左邊的數(shù)是1到k-1,根右邊的數(shù)是k+1到n。還有一點(diǎn)技巧是,對于通過一個根來說,唯一二叉樹的數(shù)量是其左子樹的數(shù)量乘以右子樹的數(shù)量,這是簡單的乘法原理。并且,左右子樹的形態(tài)數(shù)量是跟具體的數(shù)無關(guān)的,只跟這個樹里有多少節(jié)點(diǎn)有關(guān)。而根可以選擇從1到n的任意的數(shù),唯一二叉樹的總數(shù),就是根為1到n的樹相加。所以該問題化簡為以k為根,其唯一左子樹和右子樹各有多少,這就是個動態(tài)規(guī)劃的問題了。我們建立一個數(shù)組dp[i],代表節(jié)點(diǎn)數(shù)為i的唯一子樹有多少個。顯然dp[0]=dp[1]=1。

代碼
public class Solution {
    public int numTrees(int n) {
        int[] dp = new int[n + 1];
        dp[0] = dp[1] = 1;
        //從節(jié)點(diǎn)數(shù)2開始計(jì)算到節(jié)點(diǎn)數(shù)為n的BST
        for(int i = 2; i < n + 1; i++){
            //計(jì)算根是第一個數(shù)的BST數(shù)量,直到根是最后一個數(shù)的BST數(shù)量,這里j可以理解為根左邊的節(jié)點(diǎn)數(shù)
            for(int j = 0; j < i; j++){
                //有n的節(jié)點(diǎn)的BST一共有 G(n)=F(1,n-1)+F(2,n-1)+...+F(n-1,n-1)個
                //以i為根總共n個節(jié)點(diǎn)的BST有 F(i,n)=G(i-1)*G(i+1->n)個
                //BST形態(tài)數(shù)量之和一共有多少個節(jié)點(diǎn)有關(guān) G(i+1->n)=G(n-i)
                //所以G(n)= G(0)*G(n-1)+G(1)*G(n-2)+...
                dp[i] += dp[j] * dp[i - j - 1];
            }
        }
        return dp[n];
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64611.html

相關(guān)文章

  • leetcode95-96 Unique Binary Search Trees I-II

    摘要:在這里我們使用數(shù)組中下標(biāo)為的位置來記錄個元素可以組成的平衡二叉樹的數(shù)量。在遞歸的過程中,我們找到以當(dāng)前節(jié)點(diǎn)作為根節(jié)點(diǎn)的所有平衡二叉樹,并將結(jié)果以形式返回上一級調(diào)用。 題目要求 Given n, how many structurally unique BSTs (binary search trees) that store values 1...n? For example, Gi...

    morgan 評論0 收藏0
  • [Leetcode-Dynamic Programming]Unique Binary Search

    Unique Binary Search TreesGiven n, how many structurally unique BSTs (binary search trees) that store values 1...n? For example,Given n = 3, there are a total of 5 unique BSTs. 1 3 3 ...

    MartinDai 評論0 收藏0
  • 前端 | 每天一個 LeetCode

    摘要:在線網(wǎng)站地址我的微信公眾號完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個題。這是項(xiàng)目地址歡迎一起交流學(xué)習(xí)。 這篇文章記錄我練習(xí)的 LeetCode 題目,語言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號: showImg(htt...

    張漢慶 評論0 收藏0
  • [Leetcode] Validate Binary Search Tree 驗(yàn)證二叉搜索

    摘要:注意這里的結(jié)構(gòu)和不同的二叉樹遍歷一樣,如果到空節(jié)點(diǎn)就返回,否則遞歸遍歷左節(jié)點(diǎn)和右節(jié)點(diǎn)。唯一不同是加入了和,所以要在遞歸之前先判斷是否符合和的條件。代碼如果該節(jié)點(diǎn)大于上限返回假如果該節(jié)點(diǎn)小于下限返回假遞歸判斷左子樹和右子樹 Validate Binary Search Tree Given a binary tree, determine if it is a valid binary...

    fuchenxuan 評論0 收藏0
  • LeetCode 之 JavaScript 解答第98題 —— 驗(yàn)證二叉搜索

    摘要:小鹿題目驗(yàn)證二叉搜索樹給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。假設(shè)一個二叉搜索樹具有如下特征節(jié)點(diǎn)的左子樹只包含小于當(dāng)前節(jié)點(diǎn)的數(shù)。所有左子樹和右子樹自身必須也是二叉搜索樹。算法思路定義全局的變量,用來返回是否為二叉搜索樹。 Time:2019/4/24Title: Vaildata Binary Search TreeDifficulty: MediumAuthor: 小鹿 ...

    用戶84 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<