Unique Binary Search Trees II (LeetCode)
Question:
https://oj.leetcode.com/problems/unique-binary-search-trees-ii/
解答:
一般来说列举所有的可以用recursive还有bst,但是这儿bst不好用。recursive就简单些,对于当前node,求得它左子树的所有组合(vector<TreeNode*> leftChilds),还有它右子树的所有组合(vector<TreeNode*> rightChilds),两边合在一起就是当前node所有BST的组合。注意子树有可能空的情况。
/** * 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) { vector<TreeNode*> ret; GenerateBst(ret, 1, n); return ret; } void GenerateBst(vector<TreeNode*>& ret, int start, int end) { if (start > end) { ret.push_back(NULL); // make sure it at least has one node return; } for (int i = start; i <= end; i++) { vector<TreeNode*> leftChilds; vector<TreeNode*> rightChilds; GenerateBst(leftChilds, start, i-1); GenerateBst(rightChilds, i+1, end); for (int j = 0; j < leftChilds.size(); j++) { for (int k = 0; k < rightChilds.size(); k++) { TreeNode* node = new TreeNode(i); node->left = leftChilds[j]; node->right = rightChilds[k]; ret.push_back(node); } } } } };
浙公网安备 33010602011771号