Unique Binary Search Trees II

来源:互联网 发布:自己的淘宝后台在哪里 编辑:程序博客网 时间:2024/04/30 01:36

1.在1~N中任选一个数i

2.把小于i的数作为左子树,大于i的数作为右子树

3.递归生成BST

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {    vector<TreeNode *> BuildTree(int start,int end){        vector<TreeNode *> leftSubTree,rightSubTree,ret;        if(start>end){            ret.push_back( NULL);            return ret;        }        for(int i=start;i<=end;++i){            leftSubTree = BuildTree(start,i-1);            rightSubTree = BuildTree(i+1,end);            for(int j=0;j<leftSubTree.size();++j){                for(int k=0;k<rightSubTree.size();++k){                    TreeNode *root = new TreeNode(i);                    root->left=leftSubTree[j];                    root->right=rightSubTree[k];                    ret.push_back(root);                }            }        }        return ret;    }public:    vector<TreeNode *> generateTrees(int n) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        return BuildTree(1,n);    }};


 

原创粉丝点击