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.
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使用递归来寻找左右子树的所有可能节点,然后组合到一起之后返回。
public List<TreeNode> generateTrees(int n) { return generateTrees(n, 1); } public List<TreeNode> generateTrees(int n, int beg) { if(n == 0) { List<TreeNode> result = new ArrayList<TreeNode>(); result.add(null); // null should be add explicitly return result; } else { List<TreeNode> result = new ArrayList<TreeNode>(); for(int i = beg; i < beg+n; i++) { List<TreeNode> left = generateTrees(i-beg, beg); // pay attention to the return type List<TreeNode> right = generateTrees(n-i+beg-1, i+1); for(TreeNode node1 : left) { for(TreeNode node2 : right) { TreeNode root = new TreeNode(i); root.left = node1; root.right = node2; result.add(root); } } } return result; } }
没有评论:
发表评论