• 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;
            
            
        }
    };
  • 相关阅读:
    预写式日志WAL
    静态类和单例模式区别
    综合运用(带LCD的机车版)
    sublime插件“C Improved”
    sublime
    红外坦克---综合应用
    Arduino I/O Expansion Shield V7.1
    新版本LM35
    dht11 temperature & humidity sensor v2
    Shiftout Module
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5008037.html
Copyright © 2020-2023  润新知