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

    思路:DFS。取i作为根节点,递归求1->i-1 i+1->n的二叉搜索树,置于 vector<TreeNode *> left vector<TreeNode *> right 之中,然后取i作为根节点,组合数组leftright,分别取一个元素作为root的左右子树,然后将组合之后的树置于result之中,最后返回result即可。注意一个特殊情况,当start>end,将空节点写入result,返回result,代表返回一个空节点。还有就是初始n<1的特殊处理。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<TreeNode*> generateTrees(int n) {
            if(n<1){
                vector<TreeNode *> result;
                return result;
            }
            return help(1,n);
        }
        vector<TreeNode *> help(int start,int end){
            vector<TreeNode *> result;
            if(start>end){
                result.push_back(NULL);
                return result;
            }
            for(int i=start;i<=end;i++){
                vector<TreeNode *> left =help(start,i-1);
                vector<TreeNode *> right=help(i+1,end);
                for(int j=0;j<left.size();j++){
                    for(int k=0;k<right.size();k++){
                        TreeNode *root =new TreeNode(i);
                        root->left=left[j];
                        root->right=right[k];
                        result.push_back(root);
                        
                    }
                }
            }
            return result;
            
            
        }
    };
  • 相关阅读:
    【NOI2015】品酒大会 SAM
    4566: [Haoi2016]找相同字符 SAM
    3709: [PA2014]Bohater 贪心
    1925: [Sdoi2010]地精部落 dp, 抖动子序列
    4205: 卡牌配对 最大流+建图技巧
    留言板
    self-introduction
    最近比赛
    STOI补番队胡策
    BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5008037.html
Copyright © 2011-2022 走看看