標籤:
題目如下所示:返回的結果是一個Node的Vector:
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
樹節點的定義是下面這樣的
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */10 class Solution {11 public:12 vector<TreeNode*> generateTrees(int n) {13 return createNode(1, n);14 }15 16 vector<TreeNode*> createNode(int start, int end)17 {18 vector<TreeNode*> result;19 if(start > end){20 result.push_back(NULL);21 return result;22 }23 for(int i = start; i <= end; ++i){24 vector<TreeNode*> leftNode = createNode(start, i - 1);25 vector<TreeNode*> rightNode = createNode(i + 1, end);26 for(int j = 0; j < leftNode.size(); ++j){27 for(int k = 0; k < rightNode.size(); ++k){28 TreeNode * tmpNode = new TreeNode(i);29 tmpNode->left = leftNode[j]; 30 tmpNode->right = rightNode[k];31 result.push_back(tmpNode);32 }33 }34 }35 return result;36 }37 };
這一題實際上更另外一個叫做different ways to add parentheses的題目比較相似,這個也是詳見博文
LeetCode OJ :Unique Binary Search Trees II(唯一二叉搜尋樹)