LeetCode 95. Unique Binary Search Trees II

来源:互联网 发布:windows 10 蓝牙 丢失 编辑:程序博客网 时间:2024/06/05 06:05

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
参照 点击查看
/** * 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) {        if(n<=0){            return new ArrayList<TreeNode>();        }else{            return helper(1,n);        }    }    public List<TreeNode> helper(int start,int end){        List<TreeNode> subtree=new ArrayList<TreeNode>();        if(start>end){            TreeNode p=null;            subtree.add(p);        }else{            //i是根节点            for(int i=start;i<=end;i++){                //从start到i-1-start可以产生多少个左子树                //从i+1到end可以产生多少个右子树                List<TreeNode> leftTree=helper(start,i-1);                List<TreeNode> rightTree=helper(i+1,end);                //以i为根节点的子树个数等于左子树的个数乘以右子树的个数                //将多有可能的子树与根节点相连                for(int j1=0;j1<leftTree.size();j1++){                    for(int j2=0;j2<rightTree.size();j2++){                        TreeNode p = new TreeNode(i);                        p.left=leftTree.get(j1);                        p.right=rightTree.get(j2);                        subtree.add(p);                    }                }                            }        }        return subtree;            }}

0 0