leetcode Unique Binary Search Trees II
来源:互联网 发布:淘宝网电脑版登录 编辑:程序博客网 时间:2024/06/06 07:52
Unique Binary Search Trees II 原题地址:
https://oj.leetcode.com/problems/unique-binary-search-trees-ii/
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
求所有的可能。
网上有一种作法是递归,对每个可能的根,求左子树所有的可能性,再求右子树所有可能性,两个for循环列举出来,作为根下所有的可能。
public class Solution { public List<TreeNode> generateTrees(int lo, int hi) {List<TreeNode> tnlist = new ArrayList<TreeNode>();if (hi < lo) {tnlist.add(null);return tnlist;}List<TreeNode> left = new ArrayList<TreeNode>();List<TreeNode> right = new ArrayList<TreeNode>();for (int i = lo; i <= hi; i++) {left = generateTrees(lo, i-1);right = generateTrees(i+1, hi);for (int p = 0; p < left.size(); p++)for (int q = 0; q < right.size(); q++) {TreeNode tn = new TreeNode(i);tn.left = left.get(p);tn.right = right.get(q);tnlist.add(tn);}}return tnlist;}public List<TreeNode> generateTrees(int n) {return generateTrees(1, n);}}
以下为另一种代码:
public class Solution { TreeNode copy(TreeNode node) { TreeNode tn = new TreeNode(node.val); if (node.left == null) tn.left = null; elsetn.left = copy(node.left); if (node.right == null)tn.right = null; elsetn.right = copy(node.right); return tn; } TreeNode copy(TreeNode node, int plus) { TreeNode tn = new TreeNode(node.val+plus); if (node.left == null) tn.left = null; elsetn.left = copy(node.left, plus); if (node.right == null)tn.right = null; elsetn.right = copy(node.right, plus); return tn; } public List<TreeNode> generateTrees(int n) { int[] num = new int[n+1]; num[0] = 1; HashMap<Integer, List<TreeNode>> map = new HashMap<Integer, List<TreeNode>>(); for (int i = 0; i <= n; i++) map.put(i, new ArrayList<TreeNode>()); map.get(0).add(null); if (n == 0) return map.get(0); map.get(1).add(new TreeNode(1)); for (int i = 2; i <= n; i++) for (int j = 1; j <= i; j++) { int left = j - 1; int right = i - j; int l_num = map.get(left).size(); int r_num = map.get(right).size(); for (int p = 0; p < l_num; p++) for (int q = 0; q < r_num; q++){ TreeNode tn = new TreeNode(j); if (map.get(left).get(p) == null) tn.left = null; else tn.left = copy(map.get(left).get(p)); if (map.get(right).get(q) == null) tn.right = null; else tn.right = copy(map.get(right).get(q), j); map.get(i).add(tn); } } return map.get(n); }}
0 0
- LeetCode: Unique Binary Search Trees II
- LeetCode : Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- leetcode Unique Binary Search Trees II
- [LeetCode]Unique Binary Search Trees II
- [leetcode]Unique Binary Search Trees II
- LeetCode-Unique Binary Search Trees II
- [leetcode] Unique Binary Search Trees II
- LeetCode - Unique Binary Search Trees II
- LeetCode 95: Unique Binary Search Trees II
- Leetcode Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- Leetcode: Unique Binary Search Trees II
- leetcode Unique Binary Search Trees II
- 【Leetcode】Unique Binary Search Trees II
- LeetCode | Unique Binary Search Trees II
- Leetcode Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- linux下maven安装和eclipse下的maven插件安装
- QUST程序设计赛F题:Bash博弈
- ABAP Debugger Scripting的功能(非常强大)
- 1077. Kuchiguse (20)
- 算法第四版习题
- leetcode Unique Binary Search Trees II
- sicily1017 Rate of Return
- UVA 188
- NDK环境搭建
- Jetty嵌入式web的war的发布方法[张振华-Jack]
- 应用程序配置文件
- LDD3 short程序编译出错之修改
- Redis系列-配置文件小结
- mysql---源码安装