LeetCode--Unique Binary Search Trees II

来源:互联网 发布:整形网络咨询师好做吗 编辑:程序博客网 时间:2024/05/28 23:20

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

思路:递归。这道题是上一题的加强版,要求得到具体的树,那么采用递归的方法,求出以k为根节点的树的个数(1<=k<=n),其中左子树小于k,右子树大于k,然后遍历每个节点左子树和右子树,从下到上递归求解二叉搜索树。

/** * 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*>subTree;        if(!n) return subTree;        return generate(1,n);    }    vector<TreeNode*> generate(int start ,int end){        vector<TreeNode*>subTree;        if(start>end){            subTree.push_back(NULL);            return subTree;        }        for(int k=start;k<=end;k++){            vector<TreeNode*>leftSubs=generate(start,k-1);            vector<TreeNode*>rightSubs=generate(k+1,end);            for(int i=0;i<leftSubs.size();i++){                for(int j=0;j<rightSubs.size();j++){                    TreeNode *node=new TreeNode(k);                    node->left=leftSubs[i];                    node->right=rightSubs[j];                    subTree.push_back(node);                }               }        }        return subTree;    }};
原创粉丝点击