Leetcode 95. Unique Binary Search Trees II
2018-02-07 08:45
357 查看
原题:
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.
解决方法:
采用dfs还是比较容易求解的,基本思路是:由于是BST,所以左节点肯定小于根节点和左节点,这样就可以根据跟节点的值,将数组分成左右两部分,由于左右节点也要求是BST,这变成同样的子问题了,只需要再次调用dfs函数即可。最后将左节点列表、根节点、右节点列表做一个组合,即是所有的解。
代码:
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
解决方法:
采用dfs还是比较容易求解的,基本思路是:由于是BST,所以左节点肯定小于根节点和左节点,这样就可以根据跟节点的值,将数组分成左右两部分,由于左右节点也要求是BST,这变成同样的子问题了,只需要再次调用dfs函数即可。最后将左节点列表、根节点、右节点列表做一个组合,即是所有的解。
代码:
void dfs(vector<TreeNode*>& res, int l, int r){ if ( l == r){ TreeNode* node = new TreeNode(l); res.push_back(node); return; } for(int i = l; i <= r; i++){ vector<TreeNode*> left, right; dfs(left, l, i-1); dfs(right, i+1, r); if (left.size() < 1){ for(int k = 0; k < right.size(); k++){ TreeNode* node = new TreeNode(i); node->right = right[k]; res.push_back(node); } } if (right.size() < 1){ for(int j = 0; j < left.size(); j++){ TreeNode* node = new TreeNode(i); node->left = left[j]; res.push_back(node); } } for(int j = 0; j < left.size(); j++){ for(int k = 0; k < right.size(); k++){ TreeNode* node = new TreeNode(i); node->left = left[j]; node->right = right[k]; res.push_back(node); } } } } vector<TreeNode*> generateTrees(int n) { vector<TreeNode*> res; dfs(res, 1, n); return res; }
相关文章推荐
- LeetCode 95.Unique Binary Search Trees II
- leetcode 95. Unique Binary Search Trees II(dp)
- LeetCode --- 95. Unique Binary Search Trees II
- [Leetcode] 95. Unique Binary Search Trees II
- [leetcode] 95. Unique Binary Search Trees II
- [LeetCode] 95. Unique Binary Search Trees II
- [Leetcode]@python 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II LeetCode
- 【LeetCode】95.Unique Binary Search Trees II(Medium)解题报告
- leetcode 95. Unique Binary Search Trees II
- leetcode 95. Unique Binary Search Trees II-分治算法|动态规划|卡特兰数
- [leetcode] 95.Unique Binary Search Trees II
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
- leetcode 95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II
- [LeetCode]95. Unique Binary Search Trees II(DP,二叉树)
- Leetcode 95. Unique Binary Search Trees II
- [leetcode]95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II
- Leetcode-95.Unique Binary Search Trees II(a representative recursion problem)