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

    LeetCode 95 不同的二叉搜索树II

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

    执行用时:1 ms, 在所有 Java 提交中击败了99.97%的用户
    内存消耗:40.4 MB, 在所有 Java 提交中击败了49.34%的用户

    class Solution {
        public List<TreeNode> generateTrees(int n) {
            if(n==0) return new ArrayList<TreeNode>();
            List<TreeNode> ans = generateTrees(1, n);
            return ans;
        }
    
        //产生[start, end] (satrt>=1, end<=n, start<=end) 范围内所有节点组成的二叉搜索树集合
        public List<TreeNode> generateTrees(int start, int end) {
            List<TreeNode> ans = new ArrayList<TreeNode>();
            //递归终止(空树、单节点)
            if(start > end) {
                ans.add(null);
                return ans;
            }
    
            //(记忆化, 需要记录[i,j]范围内的子树集合, 一共有n(n+1)/2个)递归过程
            for(int rootVal=start; rootVal<=end; rootVal++){
                //获取左右子树集合
                List<TreeNode> leftTreesList = generateTrees(start, rootVal-1);
                List<TreeNode> rightTreesList = generateTrees(rootVal+1, end);
                //拼接
                for(int i=0; i<leftTreesList.size(); i++){
                    for(int j=0; j<rightTreesList.size(); j++){
                        TreeNode root = new TreeNode(rootVal);
                        root.left = leftTreesList.get(i);
                        root.right = rightTreesList.get(j);
                        ans.add(root);
                    }
                }
    
            }
    
            //返回值
            return ans;
    
        }
    }
    
  • 相关阅读:
    方维o2o系统域名绑定破解详解
    smarty 学习笔记一
    手机禁止缩放网页 手机CSS导入
    Android 学习笔记(一)
    自动填充短信验证码(使用ContentObserver)
    分享100个开源android项目源码
    php如何实现验证码
    Zend Studio 13 v13.0.0汉化中文版
    java中的静态方法
    继承代码
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13587999.html
Copyright © 2011-2022 走看看