• 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
    

     OJ's Binary Tree Serialization:

    The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

    Here's an example:

       1
      / 
     2   3
        /
       4
        
         5
    
    The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".

    [解题思路]

    划分成左右子树分别进行构造,当左右子树所有可能情况都构造完毕后,加上node即可

    这里根节点可能情况为1,2,....,n

     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 ArrayList<TreeNode> generateTrees(int n) {
    12         // Start typing your Java solution below
    13         // DO NOT write main() function
    14         if(n == 0){
    15             return generate(1, 0);
    16         }
    17         return generate(1, n);
    18     }
    19     
    20     public ArrayList<TreeNode> generate(int start, int end){
    21         ArrayList<TreeNode> subTree = new ArrayList<TreeNode>();
    22         if(start > end){
    23             subTree.add(null);
    24             return subTree;
    25         }
    26         
    27         for(int i = start; i <= end; i++){
    28             ArrayList<TreeNode> leftSubTree = generate(start, i - 1);
    29             ArrayList<TreeNode> rightSubTree = generate(i + 1, end);
    30             for(int j = 0; j < leftSubTree.size(); j++){
    31                 for(int k = 0; k < rightSubTree.size(); k++){
    32                     TreeNode node = new TreeNode(i);
    33                     node.left = leftSubTree.get(j);
    34                     node.right = rightSubTree.get(k);
    35                     subTree.add(node);
    36                 }
    37             }
    38         }
    39         return subTree;
    40     }
    41 }
  • 相关阅读:
    CodeForces
    网络流
    poj 2185
    树的分治学习
    数位DP
    URAL 1969. Hong Kong Tram
    hdu 4759 Poker Shuffle
    hdu3712 Detector Placement
    分块思想
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/feiling/p/3296156.html
Copyright © 2020-2023  润新知