LeetCode95 Unique Binary Search Trees II
2016-01-01 17:44
579 查看
题目链接:
https://leetcode.com/problems/unique-binary-search-trees-ii/题目描述:
找出结点个数为n的所有二叉查找树。结点的val与1~n一一对应。上次那道题是找出多少个就行了,T-T这次这个是要把找出来的树全部展示出来。
题目分析:
卡了好久,确实不会做,最后看了别人的代码。http://www.2cto.com/kf/201305/215967.html
与前面那道题还是有相似之处的。从1~n依次选为根结点。
以i为根结点的树,其左子树由[1,i-1]构成,其右子树由[i+1,n]构成。
以i为根结点的树的种数等于其左子树的种数乘右子树的种数。
vector<TreeNode*> leftTrees代表左子树 vector<TreeNode*> rightTrees代表右子树
递归思想,依次选择根结点,对左右子序列再分别建树。
代码:
class Solution { public: vector<TreeNode*> getAllTrees(int beg,int end){ vector<TreeNode*> result; if(beg>end){ result.push_back(NULL); return result; } else{ for(int i=beg;i<=end;i++){//依次选择根结点 vector<TreeNode*> leftTrees=getAllTrees(beg,i-1); vector<TreeNode*> rightTrees=getAllTrees(i+1,end);//对左右子序列再分别建树 for(int j=0;j<leftTrees.size();j++){ for(int k=0;k<rightTrees.size();k++){ //选择以i为根结点的树的个数等于其左右子树个数的乘积 TreeNode* root=new TreeNode(i); root->left=leftTrees[j]; root->right=rightTrees[k]; result.push_back(root); } } } } return result; } vector<TreeNode*> generateTrees(int n) { vector<TreeNode*> result; if(n<=0){ return result; } return getAllTrees(1,n); } };
相关文章推荐
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 本人即将筹备败家日志,敬请期待!
- IE:使用搜索助手
- C#实现获取系统目录并以Tree树叉显示的方法
- C语言实现输入一颗二元查找树并将该树转换为它的镜像
- C++深度优先搜索的实现方法
- 基于文本的搜索
- php实现搜索一维数组元素并删除二维数组对应元素的方法
- 使用Sphinx对索引进行搜索
- asp 多关键词搜索的简单实现方法
- C#使用foreach语句搜索数组元素的方法
- JavaScript中数组的排序、乱序和搜索实现代码
- C#编程实现Excel文档中搜索文本内容的方法及思路
- 纯jsp打造无限层次的树代码
- sqlserver中在指定数据库的所有表的所有列中搜索给定的值
- 可以用来搜索当前页面内容的js代码
- 全文搜索和替换
- javascript搜索自动提示功能的实现第1/3页
- mysql 模糊搜索的方法介绍
- C#搜索文字在文件及文件夹中出现位置的方法