Java for LeetCode 095 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.

解题思路:

参考Java for LeetCode 096 Unique Binary Search Trees思路,本题很容易解决。注意,如果试图不复制而使用对象的引用,是无法得到正确结果的,当然也可采用DFS的思路,但是考虑到JAVA面向对象的特征,我们还是采用Java for LeetCode 096 Unique Binary Search Trees的思路吧。

JAVA实现如下:

static public List<TreeNode> generateTrees(int n) {
List<TreeNode> list = new ArrayList<TreeNode>();
if (n == 0) {
list.add(null);
return list;
}
if (n == 1) {
list.add(new TreeNode(1));
return list;
}
for (int k = 0; k <= n - 1; k++) {
List<TreeNode> left = generateTrees(k);
List<TreeNode> right = generateTrees(n - k - 1);
for (TreeNode rightNode : right)
plus(rightNode, k + 1);
for (TreeNode leftNode : left) {
for (TreeNode rightNode : right) {
TreeNode TN = new TreeNode(k + 1);
TN.left = treeNodeClone(leftNode);
TN.right = treeNodeClone(rightNode);
list.add(TN);
}
}
}
return list;
}
public static void plus(TreeNode root, int num) {
if (root == null)
return;
root.val += num;
plus(root.left, num);
plus(root.right, num);
}
public static TreeNode treeNodeClone(TreeNode TN1){
if(TN1==null)
return null;
TreeNode TN2=new TreeNode(TN1.val);
TN2.left=treeNodeClone(TN1.left);
TN2.right=treeNodeClone(TN1.right);
return TN2;
}
上一篇:最新VMware Workstation 10注册码,绝对可用!


下一篇:[LeetCode] 96. Unique Binary Search Trees 唯一二叉搜索树