zoukankan      html  css  js  c++  java
  • 95. 不同的二叉搜索树 II

    给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。

    示例:

    输入: 3
    输出:
    [
      [1,null,3,2],
      [3,2,null,1],
      [3,1,null,null,2],
      [2,1,3],
      [1,null,2,null,3]
    ]
    解释:
    以上的输出对应以下 5 种不同结构的二叉搜索树:
    
       1         3     3      2      1
               /     /      /       
         3     2     1      1   3      2
        /     /                        
       2     1         2                 3


    思路:分治+递归

    public List<TreeNode> generateTrees(int n) {
            if(n == 0)
                return new LinkedList<C.TreeNode>();
            return mergeInsert(1,n);
        }
        public List<TreeNode> mergeInsert(int start,int end){
            List<TreeNode> res = new LinkedList<>();
            if(start>end) {
                res.add(null);
                return res;
            }
            for(int i=start;i<=end;i++) {
                List<TreeNode> subLeftTree = mergeInsert(start,i-1);
                List<TreeNode> subRightTree = mergeInsert(i+1,end);
                for(TreeNode left:subLeftTree) {
                    for(TreeNode right : subRightTree) {
                        TreeNode node = new TreeNode(i);
                        node.left = left;
                        node.right = right;
                        res.add(node);
                    }
                }
            }
            return res;
        }
  • 相关阅读:
    抽象工厂模式
    工厂方法模式
    assert断言
    非日志警告
    requests获取所有状态码
    在线工具、资料
    重定向、feed输出:控制台输出的内容存放到文件
    正则表达式python
    python提取相对路径
    logger类
  • 原文地址:https://www.cnblogs.com/godoforange/p/10874109.html
Copyright © 2011-2022 走看看