题解 | #不同的二叉搜索树#

不同的二叉搜索树

http://www.nowcoder.com/practice/b2b6734cbc0b43088f6084785046b861

二叉搜索树的概念:
如果某个节点存在左子树,则左子树上的所有节点的值都小于该节点的值;
如果某个节点存在右子树,则右子树上的所有节点的值都大于该节点的值。
因此在明确二叉搜索树的概念之后,我们可以先通过找规律来看数学关系。
n=1......................1
n=2......................2
n=3......................5
n=4......................14
n=5......................42
...
这个结果可以通过下图的图示找到规律
图片说明
代码如下

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @return int整型
     */
    int numTrees(int n) {
        // write code here
        vector<int> res(n+1,0);
        res[0]=0;
        res[1]=1;
        for(int i=2;i<=n;i++)
        {
            if(i<=3)
            {
                res[i]=2*res[i-1]+res[i-2];
                continue;
            }
            int mid=i/2;//注意这里是i,而不是n,因为如果是n的话,会导致n之前的结果有偏差
            res[i] = 2*res[i-1]+2*res[i-2];
            for(int j=2;j<mid;j++)
            {
                res[i] += 2*res[j]*res[i-1-j];
            }
            if(i%2!=0)
            {
                res[i] += res[mid]*res[mid];
            }
        }
        return res[n];
    }
};
牛客刷题记录 文章被收录于专栏

记录自己的刷题记录,刷过的题的解法

全部评论

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务