您的位置:首页 > 产品设计 > UI/UE

LeetCode 95. Unique Binary Search Trees II

2017-04-15 11:12 465 查看
题目如下:

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


思路:

递归产生子树,感觉这题很经典。 容易出错的地方有:

(1) if(n<=0) 要判断,否则,n=0的测试结果是 [[]] ,而正确应该返回 []

(2) if (s > e) {res.add(null);} 这里不能直接{return null;}

本题代码:

import java.util.ArrayList;
import java.util.List;

/**
* Created by yuanxu on 17/4/13.
*/
public class DP95 {

public static List<TreeNode> generateTrees(int n) {
if (n <= 0) return new ArrayList<>();
return generateSubtrees(1, n);
}

private static List<TreeNode> generateSubtrees(int s, int e) {
List<TreeNode> res = new ArrayList<TreeNode>();
if (s > e) { res.add(null); }

for (int i=s; i<=e; ++i) {
List<TreeNode> leftTrees = generateSubtrees(s, i-1);
List<TreeNode> rightTrees = generateSubtrees(i+1, e);

for (TreeNode left : leftTrees) {
for (TreeNode right : rightTrees) {
TreeNode root = new TreeNode(i);
root.left = left;
root.right = right;
res.add(root);
}
}
}
return res;
}

static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}

/**
* @test
*/
public static void main(String args[]) {
int n = 0;
System.out.println(generateTrees(n).get(0).val);
}

}


ref : https://discuss.leetcode.com/topic/3079/a-simple-recursive-solution
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: