• 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

    Solution: 1. DFS directly. (from the Internet)
    2. DP + DFS. (my solution)
    a. Generate trees for 'n' from 1 to n. (DP)
    b. When generate trees for n = i, get the left and right subtrees
    by copying tree structures of dp[1...i-1]. (copy tree uses DFS)

     1 /**
     2  * Definition for binary tree
     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 generateTreesRe(1, n);
    14     }
    15     
    16     vector<TreeNode*> generateTreesRe(int l, int r)
    17     {
    18         vector<TreeNode*> res;
    19         if(l > r) {
    20             res.push_back(NULL);
    21             return res;
    22         }
    23         
    24         for(int k = l; k <= r; k++) {
    25             vector<TreeNode*> left = generateTreesRe(l, k-1);
    26             vector<TreeNode*> right = generateTreesRe(k+1, r);
    27             for(int i = 0; i < left.size(); i++) {
    28                 for(int j = 0; j < right.size(); j++) {
    29                     TreeNode* root = new TreeNode(k);
    30                     root->left = left[i];
    31                     root->right = right[j];
    32                     res.push_back(root);
    33                 }
    34             }
    35         }
    36         return res;
    37     }
    38 };
  • 相关阅读:
    邻接矩阵
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/zhengjiankang/p/3656160.html
Copyright © 2020-2023  润新知