zoukankan      html  css  js  c++  java
  • leetcode95 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
     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<TreeNode*> generateTrees(int n) {
    13         vector<TreeNode*> ans;
    14         ans=generate(1,n);
    15         return ans;
    16     }
    17     vector<TreeNode*> generate(int a,int b)
    18     {
    19         vector<TreeNode*> ans;
    20         if(a>b)
    21             return ans;
    22         if(a==b)
    23         {
    24             TreeNode *temp=new TreeNode(a);
    25             ans.push_back(temp);
    26             return ans;
    27         }
    28         vector<TreeNode*> vt1=generate(a+1,b);
    29         for(int i=0;i<vt1.size();i++)
    30         {
    31             TreeNode *tr1=new TreeNode(a);//不能放到外边,否则,ans中的tr1将会变成全部相同一个。(tr1相同,tr1->right不同,故应多分tr1)
    32             tr1->right=vt1[i];
    33             ans.push_back(tr1);
    34         }
    35         
    36         vector<TreeNode*> vt2=generate(a,b-1);
    37         for(int i=0;i<vt2.size();i++)
    38         {
    39             TreeNode *tr2=new TreeNode(b);
    40             tr2->left=vt2[i];
    41             ans.push_back(tr2);
    42         }
    43         
    44         for(int i=a+1;i<=b-1;i++)
    45         {
    46             vector<TreeNode*> vt31=generate(a,i-1);
    47             vector<TreeNode*> vt32=generate(i+1,b);
    48             for(int j=0;j<vt31.size();j++)
    49             {
    50                 for(int k=0;k<vt32.size();k++)
    51                 {
    52                     TreeNode *tr3=new TreeNode(i);
    53                     tr3->left=vt31[j];
    54                     tr3->right=vt32[k];
    55                     ans.push_back(tr3);
    56                 }
    57             }
    58             
    59             
    60         }
    61         return ans;
    62     }
    63 };
    View Code
    
    
    
  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/jsir2016bky/p/5105686.html
Copyright © 2011-2022 走看看