leetcode 95. Unique Binary Search Trees II【求二叉搜尋樹的各種具體情況】
阿新 • • 發佈:2018-12-18
https://leetcode.com/problems/unique-binary-search-trees-ii/
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ... n.
Example:
Input: 3 Output: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] Explanation:The above output corresponds to the 5 unique BST's shown below: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
和上一篇類似
用分治的思想
每個點列舉作為根節點,遞迴列舉左子樹,右子樹
注意主函式判斷0直接返回[] 否則返回的是[[]]
TreeNode* root=new TreeNode(i);為什麼只能放在迴圈裡啊……
/** * 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*> dfs(int l,int r){ vector<TreeNode*>ans; if(l>r){ ans.push_back(NULL); return ans; } for(int i=l;i<=r;i++){ vector<TreeNode*>ansL=dfs(l,i-1); vector<TreeNode*>ansR=dfs(i+1,r); for(int j=0;j<ansL.size();j++){ for(int k=0;k<ansR.size();k++){ TreeNode* root=new TreeNode(i); root->left=ansL[j]; root->right=ansR[k]; ans.push_back(root); } } } return ans; } vector<TreeNode*> generateTrees(int n) { vector<TreeNode*> r; if(n==0) return r; return dfs(1,n); } };