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);
        }
    };



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

  • 相关阅读:
    Python中的字典
    Python中的元组
    Python中常见的公共方法
    Python中的列表
    Python的循环语句
    Python的流程控制
    Kubernetes-kubectl命令出现错误【The connection to the server localhost:8080 was refused
    nyoj 77-开灯问题 (倍数遍历)
    nyoj 76-超级台阶 (递推)
    nyoj 75-日期计算 (闰年与平年的判断)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4746267.html
Copyright © 2011-2022 走看看