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;
    
        }
    }
    
  • 相关阅读:
    D
    NOI 1.7编程基础之字符串(35题)
    HYSBZ 2145 悄悄话
    POJ 2406 Power Strings
    POJ 3461 Oulipo[附KMP算法详细流程讲解]
    POJ 3974 Palindrome
    POJ 1002 487-3279
    POJ 1182 食物链
    POJ 2524 Ubiquitous Religions
    HDU 1251 统计难题
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13587999.html
Copyright © 2011-2022 走看看