[leetcode]95. Unique Binary Search Trees II(Java)

来源:互联网 发布:表格数据不多 格式大 编辑:程序博客网 时间:2024/05/29 08:56

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




package go.jacob.day712;import java.util.ArrayList;import java.util.List;public class Demo2 {/* * Solution with DP */public List<TreeNode> generateTrees(int n) {List<TreeNode>[] res = new List[n + 1];res[0] = new ArrayList<TreeNode>();if (n <= 0)return res[0];// 必须add(null),否则for (TreeNode left : res[0])res[0].add(null);for (int i = 1; i <= n; i++) {res[i] = new ArrayList<TreeNode>();for (int j = 1; j <= i; j++) {for (TreeNode left : res[j - 1]) {for (TreeNode right : res[i - j]) {TreeNode node = new TreeNode(j);node.left = left;node.right = clone(right, j);res[i].add(node);}}}}return res[n];}private TreeNode clone(TreeNode n, int offset) {if (n == null)return null;TreeNode node = new TreeNode(n.val + offset);node.left = clone(n.left, offset);node.right = clone(n.right, offset);return node;}class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}}}


原创粉丝点击