Middle-题目64:95. Unique Binary Search Trees II

原创 2016年05月31日 16:34:32

题目原文:
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

题目大意:
给出n,输出节点值为1到n的所有二叉排序树。
题目分析:
使用分治法,分别令根节点为k,再递归生成1~k,k+1~n对应的二叉排序树列表,逐一加入到以k为根节点的列表中。
源码:(language:java)

public class Solution {
    public List<TreeNode> generateTrees(int n) {
        if(n==0) return new ArrayList<TreeNode>();
        return generateTrees(1, n);
    }

    private List<TreeNode> generateTrees(int start, int end){
        if(start>end) {
            List<TreeNode> list = new ArrayList<TreeNode>();
            list.add(null);
            return list;
        }
        if(start==end) {
            List<TreeNode> list = new ArrayList<TreeNode>();
            list.add(new TreeNode(start)); return list;
        }
        List<TreeNode> roots = new ArrayList<TreeNode>();
        for(int i=start;i<=end;i++){
            List<TreeNode> leftTrees = generateTrees(start, i-1);
            List<TreeNode> rightTrees = generateTrees(i+1, end);
            for(int j=0;j<leftTrees.size();j++){
                for(int k=0;k<rightTrees.size();k++){
                    TreeNode root = new TreeNode(i);
                    root.left = leftTrees.get(j);
                    root.right = rightTrees.get(k);
                    roots.add(root);
                }
            }

        }
        return roots;
    }
}

成绩:
2ms,beats 88.62%,众数3ms,53.26%
cmershen的碎碎念:
大概从这段时间的题目开始,独立完成已经有难度,代码和分析有很多会来源于百度到的各路大神的博客和discuss中,但都加以我自己的理解。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

Leetcode 95. Unique Binary Search Trees II及二叉树最大最小深度镜像树总结

95. Unique Binary Search Trees IIDescriptionHintsSubmissionsSolutionsGiven an integer n, generate al...
  • xuejianche
  • xuejianche
  • 2017年05月14日 22:43
  • 156

Unique Binary Search Trees II 不同的树个数(重重重)

题目: 点击打开链接 解答:
  • skyoceanlover
  • skyoceanlover
  • 2014年08月26日 21:02
  • 210

leetcode 95. Unique Binary Search Trees II 递归构造所有可能的搜索二叉树BST + 卡特兰数

Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1...
  • JackZhang_123
  • JackZhang_123
  • 2017年09月12日 18:25
  • 128

算法分析与设计第五周习题:95. Unique Binary Search Trees II

与96题的对比:        95题是96题Unique Binary Search Trees的升级版,95题增加了构建出所有树的要求,而不仅仅是计算树的数量。对于96题,我们可以轻易得出树数量...
  • sinat_14826343
  • sinat_14826343
  • 2017年03月21日 20:04
  • 134

Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)

1.问题描述  写一个高效的算法,从一个m×nm\times n的整数矩阵中查找出给定的值,矩阵具有如下特点:    每一行从左到右递增。 每一列从上到下递增。 2. 方法与思路2.1 二分查找法 ...
  • Jeanphorn
  • Jeanphorn
  • 2015年07月23日 20:41
  • 3108

【算法分析与设计】【第十周】96. Unique Binary Search Trees

动态规划基础训练2。 给定一个数n,求出节点数为n的二叉搜索树的个数。
  • raoyx
  • raoyx
  • 2017年11月10日 08:56
  • 46

二叉搜索树(Binary Search Tree )的定义及分析

定义:     二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 每个结点都有一个作为搜索依据的关键码(key),所有结点的关键码互不相同。 左子树(如果非空)上所...
  • jsh13417
  • jsh13417
  • 2013年01月22日 21:59
  • 3346

线索二叉树(Threaded BinaryTree)

线索二叉树 一、写在前面    本文主要介绍了中序线索化二叉树及中序线索化二叉树遍历。前序与后序原理相似,但在前、后序线索化二叉树中查找节点的后继较容易,而查找前驱要知道其双亲的信息,前、后序线索化二...
  • demi_hu
  • demi_hu
  • 2017年04月15日 12:54
  • 359

二叉搜索树(Binary Search Tree)的插入与删除

二叉搜索树的插入关键是要找到元素应该插入的位置,可以采用与Find类似的方法。 二叉搜索树的删除则要考虑三种情况:   1.要删除的是叶节点:直接删除,并再修改其父节点指针置为NULL ...
  • song_hui_xiang
  • song_hui_xiang
  • 2015年08月16日 13:10
  • 984

【HDU5573 2015上海赛区B】【构造 二进制思想】Binary Tree 二叉树上走m层加减数使得最后权值恰为n

Binary Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota...
  • snowy_smile
  • snowy_smile
  • 2015年11月29日 11:47
  • 942
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目64:95. Unique Binary Search Trees II
举报原因:
原因补充:

(最多只允许输入30个字)