[Leetcode]Unique Binary Search Trees II

来源:互联网 发布:在淘宝上怎么买开山刀 编辑:程序博客网 时间:2024/06/05 23:59

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

这道题思路和第一题其实有些类似。第一题是利用动态规划的思想,选取一个数作为根节点,然后分别计算左子树和右子树的数量,递归计算,得出最后结果。

这道题可以选取某个节点作为根节点,然后分别生成左子树和有字数的集合,然后把根节点和左子树、右子树的集合组合起来就得到所有的BST了

class Solution {public:vector<TreeNode *> generateTrees(int n) {return generate(1, n);}vector<TreeNode *> generate(int begin,int end){vector<TreeNode *>result;if (begin > end){    result.push_back(NULL);return result;}for (int i = begin; i <= end; i++){vector<TreeNode *> left = generate(begin, i - 1);vector<TreeNode *> right = generate( i + 1,end);for (int m = 0; m < left.size(); m++){for (int n = 0; n < right.size(); n++){TreeNode *newNode = new TreeNode(i);newNode->left = left[m];newNode->right = right[n];result.push_back(newNode);}}}return result;}};


0 0
原创粉丝点击