【Unique Binary Search Trees II】cpp
题目:
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.
For example,
Given n = 3, your program should return all 5 unique BST's shown below.
1 3 3 2 1\ / / / \ \3 2 1 1 3 2/ / \ \2 1 2 3
代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<TreeNode*> generateTrees(int n) {return Solution::generateBST(1, n);}static vector<TreeNode*> generateBST(int min, int max){vector<TreeNode*> ret;if ( min>max ) { ret.push_back(NULL); return ret; }for ( int i = min; i<=max; ++i ){vector<TreeNode*> left = Solution::generateBST(min, i-1);vector<TreeNode*> right = Solution::generateBST(i+1,max);for ( size_t l = 0; l < left.size(); ++l ){for ( size_t r = 0; r < right.size(); ++r ){TreeNode *root = new TreeNode(i);root->left = left[l];root->right = right[r];ret.push_back(root);}}}return ret;} };
tips:
直接学习大神的代码
http://bangbingsyb.blogspot.sg/2014/11/leetcode-unique-binary-search-trees-i-ii.html
一开始一直有一个疑问,如果min==max的时候(即只有一个元素的时候)能构造一个新的节点返回么?
肯定是可以的。因为这时left返回的是含有一个NULL的vector,right返回的是含有一个NULL的vector;两个vector的长度都是1,因此可以构造出这个新的点。
===================================================
第二次过这道题,没啥可说的,再学一遍前人的代码。没啥可说的,递归确实很漂亮。
这里的精髓在于,即使是begin>end这种情况,也返回一个长度为1的NULL点;这样做的好处是即使只有一个点传入了,l.size() 和r.szie()也都是1(虽然里面都是NULL);这样代码就很简洁了。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<TreeNode*> generateTrees(int n){return Solution::generate(1, n);}static vector<TreeNode*> generate(int begin, int end){vector<TreeNode* > ret;if ( begin>end ) {ret.push_back(NULL);return ret;}for ( int i=begin; i<=end; ++i ){vector<TreeNode*> l = Solution::generate(begin, i-1);vector<TreeNode*> r = Solution::generate(i+1, end);for ( int j=0; j<l.size(); ++j ){for ( int k=0; k<r.size(); ++k ){TreeNode* root = new TreeNode(i);root->left = l[j];root->right = r[k];ret.push_back(root);}}}return ret;} };
转载于:https://www.cnblogs.com/xbf9xbf/p/4508109.html
【Unique Binary Search Trees II】cpp相关推荐
- 【重点 递归构造二叉树】LeetCode 95. Unique Binary Search Trees II
LeetCode 95. Unique Binary Search Trees II 本博客转载自:[1]https://segmentfault.com/a/1190000007443961 [2] ...
- leetcode 95. Unique Binary Search Trees II | 96. Unique Binary Search Trees
95. Unique Binary Search Trees II https://leetcode.com/problems/unique-binary-search-trees-ii/ 题解 题是 ...
- Unique Binary Search Trees II -- LeetCode
原题链接: http://oj.leetcode.com/problems/unique-binary-search-trees-ii/ 这道题是求解所有可行的二叉查找树,从 Unique Bi ...
- LeetCode Unique Binary Search Trees II(递归或者dp)
问题:给出一个正整数,要求构造由1到n组成的所有的二叉搜索树 思路: 1.递归法 在求从1到n的二叉搜索树时,枚举中间值i(1到n),求[1,i-1]和[i+1,n]分别构成的二叉搜索树,然后根据左右 ...
- leetcode算法题--Unique Binary Search Trees II
原题链接:https://leetcode.com/problems/unique-binary-search-trees-ii/ class Solution {public:vector<T ...
- 95. Unique Binary Search Trees II
分成两边, left right排列组合加到root, lo==hi就返回当前值 1 class Solution { 2 public List<TreeNode> generateTr ...
- 95. Unique Binary Search Trees II 不同的二叉搜索树 II
给定一个整数 n,生成所有由 1 - n 为节点所组成的 二叉搜索树 . 示例: 输入:3 输出: [[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1, ...
- Leetcode95. Unique Binary Search Trees II不同的二叉搜索树2
给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,nul ...
- 96. Unique Binary Search Trees(I 和 II)
Given n, how many structurally unique BST's (binary search trees) that store values 1-n? For example ...
最新文章
- 年薪百万是什么感觉?
- java 数组 反射_java数组的反射
- #数据集#:并发脑电图、心电图和多剂量经颅电刺激行为的数据集
- android小程序源代码_我从 Android 转到微信小程序的思考
- 怎么找出消耗 CPU 的罪魁祸首?!
- Spark入门(十二)之最值
- SharePoint 2013 入门教程--系列文章
- keras简介(一)
- Ubuntu18.04-albert编译安装记录
- teamview linux命令行安装参数
- 中债估值 收益率_收债
- L1-039 古风排版 (20 分)(二维数组)
- 计算机知识二级竞赛流程,计算机知识竞赛比赛规则及流程
- Ubuntu 20.04安装字体
- iOS中PCH文件的使用
- C语言 近似求PI
- 微信新升级?这2个功能是你们期盼的吗?
- c语言中循环体表达式,C语言的循环语句
- #一首国庆生活写照#
- 基于SSM的电影票预订系统 JAVA MYSQL