比如输入为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. MySQL-第六篇DML语句

    1.DML主要操作数据表里的数据,主要完成3个任务: 1>insert:插入数据.格式:insert into ... 2>delete:删除数据.格式:delete from ... 3 ...

  2. [Bzoj3223][Tyvj1729] 文艺平衡树(splay/无旋Treap)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护 ...

  3. MongoDB数据库-基础篇

    一使用mongodb 1.常用的命令 show dbs    显示数据库列表 use dbname    进入dbname数据库,大小写敏感,没有这个数据库也不要紧 show collections ...

  4. java中位运算^,&,<<,>>,<<<,>>>总结

    1.^(亦或运算) ,针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算 ...

  5. ECharts 图表导出

    Echarts图形是由Javascript亲自在前端网页上绘制的 1.用ECharts配置项手册中的toolbox.feature.saveAsImage toolbox: { show: true, ...

  6. BUUCTF--新年快乐

    测试文件:https://buuoj.cn/files/bbf9f68a97fd551edec384914d4f3fbe/93c43c5c-3d4d-4d17-a9a1-4ffb65ebb2fb.zi ...

  7. MySQL语句优化方法(简单版)

    基础回顾: sql语句是怎么样运行的? 一般来说,客户端发送sql语句到数据库服务器——数据库服务器进行运算并返回结果——客户端显示sql语句运行结果. 在本地运行时以workbench为例,客户端为 ...

  8. quotacheck - 扫描文件系统,创建,检测并修补配额文件

    总览(SYNOPSIS) quotacheck [ -agucfinvdFR ] filesystem 描述(DESCRIPTION) quotacheck 察看每一个文件系统,建立当前磁盘使用情况表 ...

  9. rabbitmq3.7集群搭建实战

    环境: 3台 centos7.4rabbitmq3.7erlang 22 1. 有几种方式安装,这里使用的yum安装(官方推荐)2. 使用rabbitmq时需要安装erlang,在各个节点上使用vim ...

  10. 对于一般情况X1+X2+X3+……+Xn=m 的正整数解有 (m-1)C(n-1) 它的非负整数解有 (m+n-1)C(n-1)种

    对于一般情况X1+X2+X3+……+Xn=m 的正整数解有 (m-1)C(n-1) 它的非负整数解有 (m+n-1)C(n-1)种