zoukankan      html  css  js  c++  java
  • Leetcode-Unique Binary Search Trees II

    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
    

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

    Have you met this question in a real interview?
     
    Solution:
     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; left = null; right = null; }
     8  * }
     9  */
    10 public class Solution {
    11     public List<TreeNode> generateTrees(int n) {
    12         List<TreeNode> list = generateTreesRecur(n,1,n);
    13         return list;
    14         
    15     }
    16 
    17     public List<TreeNode> generateTreesRecur(int len, int s, int e){
    18         List<TreeNode> treeList = new ArrayList<TreeNode>();
    19         if (len==0){
    20             treeList.add(null);
    21             return treeList;
    22         }
    23 
    24         if (len==1){
    25             TreeNode newNode = new TreeNode(s);
    26             treeList.add(newNode);
    27             return treeList;
    28         }
    29 
    30         for (int i=s;i<=e;i++){
    31             int leftLen = i-s;
    32             int rightLen = e-i;
    33             List<TreeNode> leftList = generateTreesRecur(leftLen,s,i-1);
    34             List<TreeNode> rightList = generateTreesRecur(rightLen,i+1,e);
    35             for (int j=0;j<leftList.size();j++)
    36                 for (int k=0;k<rightList.size();k++){
    37                     TreeNode root = new TreeNode(i);
    38                     root.left = leftList.get(j);
    39                     root.right = rightList.get(k);
    40                     treeList.add(root);
    41                 }
    42 
    43         }
    44 
    45         return treeList;
    46 
    47    }
    48 }
  • 相关阅读:
    Java Web系统经常使用的第三方接口
    Direct UI
    Python 分析Twitter用户喜爱的推文
    数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
    利用Excel批量高速发送电子邮件
    普林斯顿大学数学系的崛起
    Node.js学习
    映射 SQL 和 Java 类型
    Nutch配置
    OGNL
  • 原文地址:https://www.cnblogs.com/lishiblog/p/4129751.html
Copyright © 2011-2022 走看看