leetcode 刷题之路 50 Unique Binary Search Trees II

来源:互联网 发布:图片纹理算法 编辑:程序博客网 时间:2024/05/22 10:31

Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.

For example,
Given n = 3, your program should return all 5 unique BST's shown below.

   1         3     3      2      1    \       /     /      / \      \     3     2     1      1   3      2    /     /       \                 \   2     1         2                 3

Given n, generate all structurally unique BST's (binary search trees) that store values 1...n

接上一道题目Unique Binary Search,这道题要求求出数字1~n构成的所有二叉查找树。

AC code:

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<TreeNode *> generateTrees(int n)     {        return helper(1,n);    }    vector<TreeNode *> helper(int begin,int end)    {        vector<TreeNode*> trees;        vector<TreeNode*> leftChildren;        vector<TreeNode*> rightChildren;        if(begin>end)            trees.push_back(NULL);        for(int i=begin;i<=end;i++)        {            leftChildren=helper(begin,i-1);            rightChildren=helper(i+1,end);            for(int j=0;j<leftChildren.size();j++)            {                for(int k=0;k<rightChildren.size();k++)                {                    TreeNode* root=new TreeNode(i);                    root->right=rightChildren[k];                    root->left=leftChildren[j];                    trees.push_back(root);                }            }        }        return trees;    }};


0 0