zoukankan      html  css  js  c++  java
  • LeetCode 95. Unique Binary Search Trees II

    题目如下:

    Given an integer 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

    思路: 

    递归产生子树,感觉这题很经典。 容易出错的地方有:

    (1) if(n<=0) 要判断,否则,n=0的测试结果是 [[]] ,而正确应该返回 []  

    (2) if (s > e) {res.add(null);} 这里不能直接{return null;}

    本题代码:

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by yuanxu on 17/4/13.
     */
    public class DP95 {
    
        public static List<TreeNode> generateTrees(int n) {
            if (n <= 0) return new ArrayList<>();
            return generateSubtrees(1, n);
        }
    
        private static List<TreeNode> generateSubtrees(int s, int e) {
            List<TreeNode> res = new ArrayList<TreeNode>();
            if (s > e) { res.add(null); }
    
            for (int i=s; i<=e; ++i) {
                List<TreeNode> leftTrees = generateSubtrees(s, i-1);
                List<TreeNode> rightTrees = generateSubtrees(i+1, e);
    
                for (TreeNode left : leftTrees) {
                    for (TreeNode right : rightTrees) {
                        TreeNode root = new TreeNode(i);
                        root.left = left;
                        root.right = right;
                        res.add(root);
                    }
                }
            }
            return res;
        }
    
        static class TreeNode {
            int val;
            TreeNode left;
            TreeNode right;
            TreeNode(int x) { val = x; }
        }
    
        /**
         * @test
         */
        public static void main(String args[]) {
            int n = 0;
            System.out.println(generateTrees(n).get(0).val);
        }
    
    }

    ref : https://discuss.leetcode.com/topic/3079/a-simple-recursive-solution

  • 相关阅读:
    Sum Root to Leaf Numbers——LeetCode
    Search a 2D Matrix ——LeetCode
    Surrounded Regions——LeetCode
    Palindrome Partitioning——LeetCode
    Reverse Linked List II——LeetCode
    Word Break II——LeetCode
    POJ1163——The Triangle
    3Sum Closest——LeetCode
    House Robber——LeetCode
    amqp 抓包
  • 原文地址:https://www.cnblogs.com/pinganzi/p/6713620.html
Copyright © 2011-2022 走看看