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;
            
            
        }
    };
  • 相关阅读:
    hdu 6702 ^&^ 位运算
    hdu 6709 Fishing Master 贪心
    hdu 6704 K-th occurrence 二分 ST表 后缀数组 主席树
    hdu 1423 Greatest Common Increasing Subsequence 最长公共上升子序列 LCIS
    hdu 5909 Tree Cutting FWT
    luogu P1588 丢失的牛 宽搜
    luogu P1003 铺地毯
    luogu P1104 生日
    luogu P1094 纪念品分组
    luogu P1093 奖学金
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5008037.html
Copyright © 2011-2022 走看看