zoukankan      html  css  js  c++  java
  • LeetCode OJ :Unique Binary Search Trees II(唯一二叉搜索树)

    题目如下所示:返回的结果是一个Node的Vector:

    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         return createNode(1, n);
    14     }
    15     
    16     vector<TreeNode*> createNode(int start, int end)
    17     {
    18         vector<TreeNode*> result;
    19         if(start > end){
    20             result.push_back(NULL);
    21             return result;
    22         }
    23         for(int i = start; i <= end; ++i){
    24             vector<TreeNode*> leftNode = createNode(start, i - 1);
    25             vector<TreeNode*> rightNode = createNode(i + 1, end);
    26             for(int j = 0; j < leftNode.size(); ++j){
    27                 for(int k = 0; k < rightNode.size(); ++k){
    28                     TreeNode * tmpNode = new TreeNode(i);
    29                     tmpNode->left = leftNode[j];  
    30                     tmpNode->right = rightNode[k];
    31                     result.push_back(tmpNode);
    32                 }
    33             }
    34         }
    35         return result;
    36     }
    37 };

    这一题实际上更另外一个叫做different ways to add parentheses的题目比较相似,这个详见上一篇博文。

    java版本的代码如下:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public List<TreeNode> generateTrees(int n) {
    12         if(n == 0)//如果不加上这一条,当为0的时候会返回[[]],不知道为什么,很奇怪
    13             return new ArrayList<TreeNode>();
    14         return createTree(1, n);
    15     }
    16 
    17     public List<TreeNode> createTree(int start, int end){
    18         ArrayList<TreeNode> result = new ArrayList<TreeNode>();
    19         if(start > end){
    20             result.add(null);
    21             return result;
    22         }
    23         for(int i = start; i <= end; ++i){
    24             for(TreeNode leftNode : createTree(start, i - 1)){
    25                 for(TreeNode rightNode : createTree(i + 1, end)){
    26                     TreeNode node = new TreeNode(i);
    27                     node.left = leftNode;
    28                     node.right = rightNode;
    29                     result.add(node);
    30                 }
    31             }
    32         }
    33         return result;
    34     }
    35 }
  • 相关阅读:
    每天一道LeetCode--141.Linked List Cycle(链表环问题)
    每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
    每天一道LeetCode--118. Pascal's Triangle(杨辉三角)
    CF1277D Let's Play the Words?
    CF1281B Azamon Web Services
    CF1197D Yet Another Subarray Problem
    CF1237D Balanced Playlist
    CF1239A Ivan the Fool and the Probability Theory
    CF1223D Sequence Sorting
    CF1228D Complete Tripartite
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4853982.html
Copyright © 2011-2022 走看看