BST的个数以及所有解的构造

int numTrees(int n) {
        if(n<=0) return 0;
        vector<int> dp(n+1,0);
        dp[0] = 1;
        dp[1] = 1;
        for(int i=2;i<=n;i++){  //node个数
            for(int j=1;j<=i;j++){  //left的个数
                dp[i] += dp[j-1]*dp[i-j];
            }
        }
        return dp[n];
    }
public class Solution {
    public ArrayList<TreeNode> generateTrees(int n) {
        return helper(1,n);
    }
    
    public ArrayList<TreeNode> helper(int beg,int end){
        ArrayList<TreeNode> res = new ArrayList<TreeNode>();
        if(beg>end){
            res.add(null);
            return res;
        }
        for(int i=beg;i<=end;i++){  //枚举中间点
            ArrayList<TreeNode> left = helper(beg,i-1);
            ArrayList<TreeNode> right = helper(i+1,end);
            for(int j=0;j<left.size();j++){  //左子树的根
                for(int k=0;k<right.size();k++){  //右子树的根
                    TreeNode root = new TreeNode(i);
                    root.left = left.get(j);
                    root.right = right.get(k);
                    res.add(root);
                }
            }
        }
        return res;
    }
}


猜你喜欢

转载自blog.csdn.net/weixin_42246923/article/details/80979294