zoukankan      html  css  js  c++  java
  • [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
    

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

    Hide Tags
     Tree Dynamic Programming
    Have you met this question in a real interview? 
    Yes
     
    No
     

    Discuss

    思路:Unique Binary Search Trees是用dp,求解所有的trees不能用dp。

    对于每一个root,有leftNum * rightNum种情况,直接穷举,对于start>end, 返回含有NULL的一个节点,start==end也返回一个节点,框架和深搜一样

    class Solution {
        public:
            vector<TreeNode *> dfs(int start, int end)
            {
                vector<TreeNode*> trees;
    
                if(start > end)
                {
                    trees.push_back(NULL);
                    return trees;
                }
                if(start == end)
                {
                    TreeNode* p = new TreeNode(start);
                    trees.push_back(p);
                    return trees;
                }
    
                for(int rootVal = start; rootVal <= end; rootVal ++)
                {
                    vector<TreeNode*> leftSubTrees = dfs(start, rootVal - 1);
                    vector<TreeNode*> rightSubTrees = dfs(rootVal + 1, end);
    
                    int leftSubTreesNum = leftSubTrees.size();
                    int rightSubTreesNum = rightSubTrees.size();
                    for(int i = 0; i < leftSubTreesNum; i++)
                    {
                        for(int j= 0; j< rightSubTreesNum; j++)
                        {
                            TreeNode* root = new TreeNode(rootVal);
                            TreeNode* left = leftSubTrees[i];
                            TreeNode* right= rightSubTrees[j];
                            root->left = left;
                            root->right= right;
                            trees.push_back(root);
                        }
                    }
                }
                return trees;
            }
            vector<TreeNode *> generateTrees(int n) {
                if(n == 0)
                {
                    vector<TreeNode *>   trees;
                    trees.push_back(NULL);
                    return trees;
                }
                return dfs(1, n);
            }
    };
  • 相关阅读:
    springBoot异常处理
    webSocket
    Java正则
    String.format
    JSTL-taglib
    http meta
    chrome 常用插件下载安装
    mysql 命令行个性化设置
    Entity Framework Code First
    SignalR Connection has not been fully initialized
  • 原文地址:https://www.cnblogs.com/diegodu/p/4387420.html
Copyright © 2011-2022 走看看