zoukankan      html  css  js  c++  java
  • leetcode先刷_Unique Binary Search Trees II

    可能没想到,人的简单方法,关于质询的问题提出做。

    如何把产生出来的所有的树木?所使用的方法当然是递归,但是有一个致命的问题,假设根节点,然后做一个递归,所以这是非常多的公共树木的根,结果肯定是一团糟。

    怎么办?事实上,在思想上先实践的数量目前正在寻求高度统一,先把全部的左右子树都求出来。然后把它们之间的全部组合都连接到一个新建立出来的根节点,既然是分开左右子树。非常easy想到类似二分的思想。每次指定的不是一个位置。而是一个范围。我一開始还想着先把n个数放到数组里面再递归,脱了裤子放屁啊。

    通过对算法思想的描写叙述,“先确定左右子树,再加入根节点”。非常easy想到使用类似后序遍历的编码格式。

    class Solution {
    public:
        vector<TreeNode *> buildTrees(int beg, int end){
            vector<TreeNode *> res, left, right;
            if(beg>end){
                res.push_back(NULL);
                return res;
            }
            for(int i=beg;i<=end;i++){
                left = buildTrees(beg, i-1);
                right = buildTrees(i+1, end);
                for(int j=0;j<left.size();j++){
                    for(int k=0;k<right.size();k++){
                        TreeNode *root = new TreeNode(i+1);
                        root->left = left[j];
                        root->right = right[k];
                        res.push_back(root);
                    }
                }
            }
            return res;
        }
        vector<TreeNode *> generateTrees(int n) {
            return buildTrees(0, n-1);
        }
    };



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    log日志----logging模块
    配置文件--configparser
    面向对象——进阶
    面向对象
    内置函数
    模块和包
    常用模块
    正则表达式
    递归函数
    内置函数+匿名函数
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4746267.html
Copyright © 2011-2022 走看看