[LeetCode]95.Unique Binary Search Trees II

来源:互联网 发布:椰族部落永久域名全拼 编辑:程序博客网 时间:2024/05/16 15:38

【题目】

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

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


【分析】

参考:[LeetCode]96.Unique Binary Search Trees

【代码】

/**********************************   日期:2014-12-27*   作者:SJF0115*   题目: 95.Unique Binary Search Trees II*   来源:https://oj.leetcode.com/problems/unique-binary-search-trees-ii/*   结果:AC*   来源:LeetCode*   总结:**********************************/#include <iostream>#include <vector>using namespace std;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) {        if (n <= 0){            return generate(1, 0);        }//if        else{            return generate(1, n);        }    }//private:    // 返回根节点结合    vector<TreeNode*> generate(int start,int end){        vector<TreeNode*> subTree;        if(start > end){            subTree.push_back(NULL);            return subTree;        }//if        // i作为根节点        for(int i = start;i <= end;i++){            // 以i为根节点的树,其左子树由[start,i-1]构成,其右子树由[i+1,end]构成。            // 返回的是不同二叉查找树的根节点,几种二叉查找树就返回几个根节点            vector<TreeNode*> leftSubTree = generate(start,i-1);            vector<TreeNode*> rightSubTree = generate(i+1,end);            // 左子树右子树跟根节点连接            // 以i为根的树的个数,等于左子树的个数乘以右子树的个数            for(int j = 0;j < leftSubTree.size();j++){                for(int k = 0;k < rightSubTree.size();k++){                    TreeNode* node = new TreeNode(i);                    node->left = leftSubTree[j];                    node->right = rightSubTree[k];                    subTree.push_back(node);                }//for            }//for        }//for        return subTree;    }//};// 先序遍历void PreOrder(TreeNode* root){    if(root == NULL){        return;    }//if    cout<<root->val<<" ";    PreOrder(root->left);    PreOrder(root->right);}int main() {    Solution solution;    vector<TreeNode*> vec = solution.generateTrees(3);    for(int i = 0;i < vec.size();i++){        TreeNode* root = vec[i];        PreOrder(root);        cout<<endl;    }}







0 0
原创粉丝点击