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 }
  • 相关阅读:
    3631: [JLOI2014]松鼠的新家
    1112: [POI2008]砖块Klo
    1935: [Shoi2007]Tree 园丁的烦恼
    4001: [TJOI2015]概率论
    1339 / 1163: [Baltic2008]Mafia
    4010: [HNOI2015]菜肴制作
    4052: [Cerc2013]Magical GCD
    2292: 【POJ Challenge 】永远挑战
    4063: [Cerc2012]Darts
    3997: [TJOI2015]组合数学
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4853982.html
Copyright © 2011-2022 走看看