leetCode练习(95)

来源:互联网 发布:python.ax.text 编辑:程序博客网 时间:2024/05/29 14:25

题目:Unique Binary Search Trees II

难度:MEDIUM

问题描述:

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

解题思路:

通过先解决的Unique Binary Search Trees I,我们知道了可以用动态规划的方法解,这里方法与|一样,通过子问题解的组合来构成现问题的解。易错点在于,n=0时,我们对属于它的链表res[0]也要加入节点null,否则如果左子树需要n=0的解集,而链表为空,则会直接跳过里面对右子树的访问。所以我们需要加入一行res[0].add(null); 这样就能解决此问题。

具体代码如下:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public 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=1;j<=i;j++){for(TreeNode left:res[j-1]){for(TreeNode right:res[i-j]){TreeNode root=new TreeNode(j);root.left=left;root.right=Clone(right,j);res[i].add(root);}}}}return res[n];    }    public TreeNode Clone(TreeNode root,int index){if(root==null)return null;TreeNode res=new TreeNode(root.val+index);res.left=Clone(root.left,index);res.right=Clone(root.right,index);return res;}}

0 0