比如输入为n, 这道题目就是让返回由1,2,... n的组成的所有二叉排序树,每个树都必须包含这n个数

这是二叉树的排列组合的题目。排列组合经常用DFS来解决。

这道题比如输入为3,也就是求start=1, end=3的所有树,简写为t[1,3]。那么就要考虑这些情况:

//t[a,b]={NULL} if a>b

root为1,left为t[1,0], right为t[2,3]    left为{NULL}, right为两个树(见下面解释)

root为2,left为t[1,1], right为t[3,3]

root为3,left为t[1,2], right为t[4,3]

类似,要求t[2,3], 就要考虑下面情况

root为2,left为t[2,1], right为t[3,3], 可以看出只有一个

root为3,left为t[2,2], right为t[4,3], 也只有一个

另外对于DFS,为防止重复计算,可以用map来存储计算过的t[x,y]。这也是经常用到的办法。

class Solution {
public:
vector<TreeNode*> generateTreesDFS(int start, int end, map<pair<int,int>, vector<TreeNode*>>& vecTreeMap) {
vector<TreeNode*> subTree;
if(vecTreeMap.find({start, end}) != vecTreeMap.end())
return vecTreeMap[{start,end}];
//a(start)
//a(end)
//ahd(subTree)
if (start > end) subTree.push_back(NULL);
else {
for (int i = start; i <= end; ++i) {
vector<TreeNode*> leftSubTree = generateTreesDFS(start, i - , vecTreeMap);
vector<TreeNode*> rightSubTree = generateTreesDFS(i + , end, vecTreeMap);
for (int j = ; j < leftSubTree.size(); ++j) {
for (int k = ; k < rightSubTree.size(); ++k) {
TreeNode *node = new TreeNode(i);
node->left = (leftSubTree)[j];
node->right = (rightSubTree)[k];
subTree.push_back(node);
}
}
}
//dsp
}
vecTreeMap[{start, end}] = subTree;
return subTree;
} vector<TreeNode*> generateTrees(int n) {
if(n==) return {};
map<pair<int,int>, vector<TreeNode*>> vecTreeMap;
//amap(vecTreeMap, pair<int,int>, vector<TreeNode*>)
return generateTreesDFS(,n, vecTreeMap);
}
};

程序动态运行过程:http://simpledsp.com/FS/Html/lc95.html

LeetCode 95. Unique Binary Search Trees II 动态演示的更多相关文章

  1. [LeetCode] 95. Unique Binary Search Trees II(给定一个数字n,返回所有二叉搜索树) ☆☆☆

    Unique Binary Search Trees II leetcode java [LeetCode]Unique Binary Search Trees II 异构二叉查找树II Unique ...

  2. [leetcode]95. Unique Binary Search Trees II给定节点形成不同BST的集合

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...

  3. [LeetCode] 95. Unique Binary Search Trees II 唯一二叉搜索树 II

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  4. [LeetCode] 95. Unique Binary Search Trees II 独一无二的二叉搜索树之二

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...

  5. leetcode 95 Unique Binary Search Trees II ----- java

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...

  6. leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  7. [leetcode]95 Unique Binary Search Trees II (Medium)

    原题 字母题添加链接描述 一开始完全没有思路.. 百度看了别人的思路,对于这种递归构造的题目还是不熟,得多做做了. 这个题目难在构造出来.一般构造树都需要递归. 从1–n中任意选择一个数当做根节点,所 ...

  8. 【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)

    [LeetCode]95. Unique Binary Search Trees II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzh ...

  9. leetcode 96. Unique Binary Search Trees 、95. Unique Binary Search Trees II 、241. Different Ways to Add Parentheses

    96. Unique Binary Search Trees https://www.cnblogs.com/grandyang/p/4299608.html 3由dp[1]*dp[1].dp[0]* ...

随机推荐

  1. Codeforces 1166E(思维)

    题面 有一个长度为n的序列a,有m次操作.每一次操作一个人选a的一个子集x,另一个人会选x的补集y.且x集合中的数的最小公倍数比y集合中的数的最小公倍数大.现在给出所有x,判断是否有一个序列a满足条件 ...

  2. Codeforces 770C Online Courses In BSU (DFS)

    <题目链接> 题目大意:给定$n$个任务,其中有$m$个主线任务,然后$n$个任务中,每个任务都有可能有一个list,表示完成这个任务之前必须要完成的任务,然后现在让你找出,完成这$m$个 ...

  3. Windows组决策

    https://blog.csdn.net/wangjunjun2008/article/details/82426587

  4. 20180305-Python中迭代器和生成器

    一.迭代器 迭代器是访问集合元素的一种方式.迭代器从访问到集合的第一个元素开始访问,直到所有元素被访问结束.而且迭代器只能往前访问,不能后退.另外迭代器的另一个优点,不会事先准备好访问的集合的所有元素 ...

  5. matplot绘图无法显示中文的问题

    手动添加: from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 mpl.rcParams['axes.un ...

  6. 如何去除inline-block的默认间距

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  7. [BZOJ1018][SHOI2008]堵塞的交通traffic 时间分治线段树

    题面 介绍一种比较慢的但是好想的做法. 网上漫天的线段树维护联通性,然后想起来费很大周折也很麻烦.我的做法也是要用线段树的,不过用法完全不同. 这个东西叫做时间分治线段树. 首先我们建一个\(1..m ...

  8. 使用axios上传文件到阿里云对象文件存储服务器oss

    背景 OSS可用于图片.音视频.日志等海量文件的存储.各种终端设备.Web网站程序.移动应用可以直接向OSS写入或读取数据.OSS支持流式写入和文件写入两种方式.使用阿里云oss做文件存储的时候,不可 ...

  9. windows下zookeeper单机版安装+dubbo-admin安装注意点

    一:zookeeper安装 安转包下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper 复制修改conf下的zoo_sample.cfg为zoo.cf ...

  10. 什么是ppa

    What is ppa? PPAs are for non standard software/updates. They are generally used by people who want ...