Unique Binary Search Trees II

来源:互联网 发布:商城域名备案 编辑:程序博客网 时间:2024/04/30 03:41

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.

   1         3     3      2      1    \       /     /      / \      \     3     2     1      1   3      2    /     /       \                 \   2     1         2                 3

Analysis: DFS. Select different element in the in-order array as the root of each subtree. 

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; left = null; right = null; } * } */public class Solution {    public ArrayList<TreeNode> helper(int[] inorder) {        ArrayList<TreeNode> res = new ArrayList<TreeNode>();        if(inorder.length == 0) {            TreeNode root = null;            res.add(root);            return res;        }                for(int i=0; i<inorder.length; i++) {            ArrayList<TreeNode> left = helper(Arrays.copyOfRange(inorder, 0, i));            ArrayList<TreeNode> right = helper(Arrays.copyOfRange(inorder, i+1, inorder.length));                        for(int j=0; j<left.size(); j++) {                for(int k=0; k<right.size(); k++) {                    TreeNode root = new TreeNode(inorder[i]);                    root.left = left.get(j);                    root.right = right.get(k);                    res.add(root);                }            }        }        return res;    }            public ArrayList<TreeNode> generateTrees(int n) {        int[] inorder = new int[n];        for(int i=0; i<n; i++) {            inorder[i] = i+1;        }        return helper(inorder);    }}

0 0
原创粉丝点击