LeetCode: Validate Binary Search Tree

来源:互联网 发布:淘宝严重违规12分2999 编辑:程序博客网 时间:2024/04/30 18:07

思路:设 ret[i] 表示序列 1 到 i 的所有搜索二叉树的个数,那么在这些数中,必有一个数  k ∈ [1, i] 处在根节点位置,那么左子树的所有节点都小于 k,右子树的所有节点都大于 k,所以,当 k 处于根节点位置时,此时的树有 ret[k-1] * ret[i - k ] 棵,ret[k-1]表示小于k 的左子树个数,ret[i-k]表示大于k的右子树个数。依次求和所有k值,得到最后的结果,即ret[i] = ∑_k (ret[k-1] * ret[i-k]), k属于[1,i]。

code:

class Solution {public:    int numTrees(int n) {        int *ret = new int[n+1];        ret[0] = 1;        ret[1] = 1;        for(int i = 2;i<=n;i++){            ret[i] = 0;            for(int j = 1;j <= i;j++)                ret[i] += (ret[i - j] * ret[j - 1]);        }        return ret[n];    }};


0 0
原创粉丝点击