【LeetCode】95.Unique Binary Search Trees II(Medium)解题报告
2018-03-29 13:52
549 查看
【LeetCode】95.Unique Binary Search Trees II(Medium)解题报告
题目地址:https://leetcode.com/problems/unique-binary-search-trees-ii/description/
题目描述:
Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1…n.
Solution1:
Solution2:
Date:2018年3月29日
题目地址:https://leetcode.com/problems/unique-binary-search-trees-ii/description/
题目描述:
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
Solution1:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } 96基础上,要把树构建出来,并存储 两种方法,第一种dp,第二种dfs根绝二叉搜索树性质做,但是第二种方法更好 第一种:DP */ class Solution { public List<TreeNode> generateTrees(int n) { List<TreeNode>[] res = new List[n+1]; res[0] = new ArrayList<>(); if(n == 0) return res[0]; res[0].add(null); for(int i=1 ; i<=n ; i++){ res[i] = new ArrayList<>(); for(int j=0 ; j<i ; j++){ for(TreeNode left : res[j]){ for(TreeNode right : res[i-j-1]){ TreeNode root = new TreeNode(j+1); root.left = left; root.right = clone(right,j+1); res[i].add(root); } } } } return res ; } public TreeNode clone(TreeNode root,int k){ if(root == null) return root; TreeNode cur = new TreeNode(root.val+k); cur.left = clone(root.left,k); cur.right = clone(root.right,k); return cur; } }
Solution2:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } 96基础上,要把树构建出来,并存储 两种方法,第一种dp,第二种dfs根绝二叉搜索树性质做,但是第二种方法更好 第二种 */ class Solution { public List<TreeNode> generateTrees(int n) { if(n == 0) return new ArrayList<>(); return genTreeList(1,n); } public List<TreeNode> genTreeList(int start,int end){ List<TreeNode> list = new ArrayList<>(); if(start>end){ list.add(null); } for(int idx=start ; idx<=end ; idx++){ List<TreeNode> leftList = genTreeList(start , idx-1); List<TreeNode> rightList = genTreeList(idx+1,end); for(TreeNode left : leftList){ for(TreeNode right : rightList){ TreeNode root = new TreeNode(idx); root.left = left; root.right = right; list.add(root); } } } return list; } }
Date:2018年3月29日
相关文章推荐
- Leetcode 95. Unique Binary Search Trees II 二叉搜索树2 解题报告
- [leetcode] 95. Unique Binary Search Trees II 解题报告
- [Leetcode] 95. Unique Binary Search Trees II 解题报告
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
- Unique Binary Search Trees II [Leetcode 解题报告]
- Leetcode 95. Unique Binary Search Trees II (Medium) (cpp)
- LeetCode解题报告—— Reverse Linked List II & Restore IP Addresses & Unique Binary Search Trees II
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
- leecode 解题总结: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]Unique Binary Search Trees, 解题报告
- [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&96. Unique Binary Search Trees--动态规划,二叉树