LeetCode_DP_Unique Binary Search Trees II

来源:互联网 发布:淘宝修车工具箱 编辑:程序博客网 时间:2024/06/05 05:18

Unique Binary Search Trees II

这里写图片描述


一、题目说明

与 Unique Binary Search Trees(http://blog.csdn.net/gldemo/article/details/48167973)不同的地方是输出所有可能组成的二叉搜索树。

二、思路

该算法应该是采用循环,循环按每个 i 作为根节点,循环中应用递归的方式去不断构造左子树和右子树。然后在循环中组合不同的左右子树。

三、java代码

/** * 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> generateTress(int n) {        return generateTrees(1, n);    }    public List<TreeNode> generateTrees(int start, int end) {        List<TreeNode> list = new ArrayList<TreeNode>();        if(start > end ) {            list.add(null);            return list;        }        if(start == end) {            list.add(new TreeNode(start));            return list;        }        List<TreeNode> left, right;        for(int i = start; i <= end; i++) {            left = generateTrees(start, i-1);            right = generateTrees(i+1, end);            for(TreeNode l : left) {                for(TreeNode r : right) {                    TreeNode root = new TreeNode(i);                    root.left = l;                    root.right = r;                    list.add(root);                }            }        }        return list;    }}
0 0
原创粉丝点击