Posts Tagged 【Catalan && dfs】Unique Binary Search Trees I && II
2015-05-01 10:54
429 查看
Unique Binary Search Trees
Total Accepted: 47048 TotalSubmissions: 129376My Submissions
Question
Solution
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
/* 参考http://blog.csdn.net/csu54zzg/article/details/45148007 以i为根节点的树,其左子树由[1, i-1]构成, 其右子树由[i+1, n]构成。 i=1,2,3..n,左右两边各有几个 f(0) = 1, f(1) = 1 f(n) = f(0)*f(n-1)+f(1)*f(n-2)+...f(n-1)*f(0) */ public class Solution { public int numTrees(int n) { if(n<2) return 1; int[] f = new int[n+1]; f[0] = f[1] = 1; for(int i = 2;i<n+1;i++) { f[i] = 0; for(int j = 0;j<i;j++) { f[i] += f[j]*f[i-1-j]; } } return f ; } }
Unique Binary Search Trees II
Total Accepted: 29265 TotalSubmissions: 105724My Submissions
Question
Solution
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
confused what
"{1,#,2,3}"means? >
read more on how binary tree is serialized on OJ.
/* 以i为根节点的树,其左子树由[1, i-1]构成, 其右子树由[i+1, n]构成。 每一子树返回可能的各种组合根节点 递归, 对于[start, end]范围内的每个节点, 产生所有可能的左、右子树, 再产生(#左子树 x #右子树)棵树, 返回所有的root nodes。 gen函数返回一个list of root nodes, 每个root node所表示的树是由[start, end]这个范围内的数构成的BST。 */ /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; left = null; right = null; } * } */ public class Solution { public List<TreeNode> generateTrees(int n) { return generateTrees(1,n); } private List<TreeNode> generateTrees(int start, int end) { List<TreeNode> list = new ArrayList<TreeNode>(); if(start > end) { list.add(null); return list; } for(int i = start;i<=end;i++) { List<TreeNode> treeLeft = new ArrayList<TreeNode>(); List<TreeNode> treeRight = new ArrayList<TreeNode>(); treeLeft = generateTrees(start, i-1); treeRight = generateTrees(i+1, end); for(int j = 0;j<treeLeft.size();j++) for(int k = 0;k<treeRight.size();k++) { TreeNode root = new TreeNode(i); root.left = treeLeft.get(j); root.right = treeRight.get(k); list.add(root); } } return list; } }
Have you met this question in a real interview?
相关文章推荐
- [Leetcode]Unique Binary Search Trees I & II
- Unique Binary Search Trees I & II
- 【LeetCode】Unique Binary Search Trees I && II
- [LeetCode] Unique Binary Search Trees II dfs 深度搜索
- DFS Unique Binary Search Trees II
- 96. Unique Binary Search Trees && 95. Unique Binary Search Trees II
- LeetCode之Unique Binary Search Trees & Unique Binary Search Trees II
- Unique Binary Search Trees (& II)
- 【leetcode】Unique Binary Search Trees I & II
- LeetCode: Unique Binary Search Trees I & II
- unique-binary-search-trees I&II
- leetcode之Unique Binary Search Trees && Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II&96. Unique Binary Search Trees--动态规划,二叉树
- Unique Binary Search Trees I & II
- LeetCode解题报告—— Reverse Linked List II & Restore IP Addresses & Unique Binary Search Trees II
- (Leetcode)Unique Binary Search Trees I & II
- Unique Binary Search Trees I & II
- leetcode -- Unique Binary Search Trees I&II -- 重点
- Unique Binary Search Trees I&II——给定n有多少种BST可能、DP
- LeetCode.96(95) Unique Binary Search Trees(fibonacci的经典改进算法)&& II