原题

字母题添加链接描述

一开始完全没有思路。。 百度看了别人的思路,对于这种递归构造的题目还是不熟,得多做做了。

这个题目难在构造出来。一般构造树都需要递归。
从1–n中任意选择一个数当做根节点,所以其左边的数字构成其左子树,右边的数字当做右子树。
因为要求出所有的子树,所以当左子树固定的时候,把所有可能的右子树都构成,然后再变换左子树。 这个代码难理解的地方在于left_nodes 和 right_nodes的求法,这个一定要结合递归的终止条件去看,
当选择的根节点的值i比left小的时候,那么其实左子树就是空了。
如果把这个理解了,那么下面的对左右子树的遍历应该也不难理解。
class Solution {
public:
vector<TreeNode *> generateTrees(int n) {
vector<TreeNode *> res;
if (n <= 0) return res;
return helper(1, n);
} private:
vector<TreeNode *> helper(int start, int end) {
vector<TreeNode *> subTree;
if (start > end) {
subTree.push_back(NULL);
return subTree;
}
for (int k = start; k <= end; k++) {
vector<TreeNode *> leftSubs = helper(start, k - 1);
vector<TreeNode *> rightSubs = helper(k + 1, end); for (int i = 0; i < leftSubs.size(); i++) {
for (int j = 0; j < rightSubs.size(); j++) {
TreeNode *node = new TreeNode(k);
node->left = leftSubs[i];
node->right = rightSubs[j];
subTree.push_back(node);
}
}
}
return subTree;
}
};

最新文章

  1. SQL数据库之DQL
  2. Solr5.5.1 IK中文分词配置与使用
  3. Ext小总结
  4. Android Killer工具用法
  5. php进程占用大量cpu优化
  6. Android SDK content Loader has encountered a problem.parseSdkContent failed
  7. Trie树:POJ2001
  8. mysql数据库性能优化(包括SQL,表结构,索引,缓存)
  9. Mobile phones_二维树状数组
  10. Ext.useShims=true
  11. 定制ckeditor的菜单
  12. 怎样判断iOS App是通过哪种途径启动的?
  13. 学习笔记:JavaScript-进阶篇
  14. java 使用https协议,cas认证PKIX path building failed错误解决方法
  15. 《Java并发编程实战》笔记-OneValueCache与原子引用技术
  16. 11-matlba-bellman-ford;地杰斯特拉
  17. #include &lt;algorithm&gt;中sort的一般用法
  18. 1002. A+B for Polynomials(25)—PAT 甲级
  19. python2.7 + ubuntu14.4 + dlib19.7
  20. LINUX主机通过域名访问网络失败

热门文章

  1. [转载] ASP.NET MVC (一)——深入理解ASP.NET MVC
  2. 高性能JSON解析器及生成器RapidJSON
  3. Qt学习虚拟机--基于MSYS2-MinGW环境并带有各种开源的软件库!
  4. .NET中扩展方法和Enumerable(System.Linq)
  5. Kafka笔记5
  6. shell多线程
  7. ssh证书登录
  8. Web前端——JavaScript练习
  9. 区块狗开发可以做出APP吗
  10. 全自动Landsat影像温度反演软件开发