Unique Binary Search Trees II

来源:互联网 发布:gta5手机网络中的网站 编辑:程序博客网 时间:2024/06/03 10:55

Unique Binary Search Trees II

Given an integer 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
解析:与Different Ways to Add Parentheses 相同,lefttree存放所有种类的左子树,righttree存放所有种类的右子树,然后遍历

代码:

/** * Definition for a binary tree node. * 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) {        vector<TreeNode* > res;        if (n==0)        return res;                return Helper(1,n);    }            vector<TreeNode*>Helper(int begin,int end)    {        vector<TreeNode*>res;        if (begin>end)        {             res.push_back(NULL);             return res;        }               if (begin==end)        {            TreeNode* temp=new TreeNode(begin);                       res.push_back(temp);            return res;        }        for (int i=begin; i<=end; i++)        {                       vector<TreeNode *>leftTree=Helper(begin,i-1);            vector<TreeNode *>rightTree=Helper(i+1,end);                  for (int p=0; p<leftTree.size(); p++)            {                for (int q=0; q<rightTree.size(); q++)                {                    TreeNode* root=new TreeNode(i);                    root->right=rightTree[q];                    root->left=leftTree[p];                    res.push_back(root);                }            }                                }        return res;            }};


0 0
原创粉丝点击