码迷,mamicode.com
首页 > 其他好文 > 详细

95. Unique Binary Search Trees II

时间:2016-05-16 07:07:09      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

    /*
     * 95. Unique Binary Search Trees II
     * 2016-5-14 By Mingyang
     * 分成两个函数来写,另外一个函数写满起点到终点
     * 这个题目自己写的代码很有收获
     * 1.最开始的判断n<1必须加上,不然会报错,Input:0 Output:[[]] Expected:[]
     * 2.if (start > end) 
     *    {list.add(null);
     *            return list;
     * 这步很重要,最关键的串联一步,如果没有那就返回null,直接串联
     */
    public List<TreeNode> generateTrees(int n) {
           List<TreeNode> res=new ArrayList<TreeNode>();
           if(n<1)//这不能少
            return res;
        return generateTrees(1, n);
    }
    public List<TreeNode> generateTrees(int start, int end) {
        List<TreeNode> list = new LinkedList<TreeNode>();
        if (start > end) {
        //最开始我也错了,直接返回list,必须返回null,不然人家才能串联起来,node.left=null;
            list.add(null);
            return list;
        }
        for (int i = start; i <= end; i++) {
            List<TreeNode> lefts = generateTrees(start, i - 1);//以i作为根节点,左子树由[1,i-1]构成
            List<TreeNode> rights = generateTrees(i + 1, end);//右子树由[i+1, n]构成
            for (TreeNode left : lefts) {//左边和右边分别返回了一个list,每个值就是一个TreeNode,就代表一种可能性
                for (TreeNode right : rights) {
                    TreeNode node = new TreeNode(i);
                    node.left = left;
                    node.right = right;
                    list.add(node);//存储所有可能行
                }
            }
        }
        return list;
    }

 

95. Unique Binary Search Trees II

标签:

原文地址:http://www.cnblogs.com/zmyvszk/p/5496827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!