【一天一道LeetCode】#95. Unique Binary Search Trees II
来源:互联网 发布:触摸屏手写软件 编辑:程序博客网 时间:2024/06/05 17:06
一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github
欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处
(一)题目
Given an integer 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.
(二)解题
刷了这么久的题,做题起来还是这么吃力,好心塞。
今天这道题想了好久,写完代码发现思路都错了。
明天继续想!
——————————————–20160619 updata———————————————
题目大意:给定一个数n,求以1~n组成的所有二叉搜索树。
二叉搜索树的特征是:左子树<根节点<右子树
由这个特征可以得出解题的大致思路:
首先从1~n中选取一个数i,将小于i的数放在一个集合left中,将大于i的放在另一个集合right中,再从left和right中各选取一个数作为i的左右子树,剩下的就是递归的过程了。
left集合和right集合中也是进行上述同样的操作,选取一个i,大于和小于i的分别选一个数作为左右子树,得到一个小二叉搜索树。
最后就可以得到所有的二叉搜索树的集合了。
/** * 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) { vector<TreeNode*> ret; if(n==0) return ret;//n=0,特殊情况 ret = createTree(1,n); return ret; } vector<TreeNode*> createTree(int start ,int end) { vector<TreeNode*> results; if(start > end)//代表没有选取的节点了 { results.push_back(NULL); return results; } for(int i = start ; i <= end ; i++) { vector<TreeNode*> left = createTree(start,i-1);//左边的子树集合 vector<TreeNode*> right = createTree(i+1,end);//右边的子树集合 for(int m = 0 ; m < left.size() ; m++) { for(int n = 0 ; n < right.size() ; n++) { TreeNode* root = new TreeNode(i); root ->left = left[m];//从小于i的数中选取一个作为左子树 root ->right = right[n];//从大于i的数中选取一个作为右子树 results.push_back(root); } } } return results;//返回以i为root节点的子二叉搜索树 }};
0 0
- 【一天一道LeetCode】#95. Unique Binary Search Trees II
- 【一天一道LeetCode】#96. Unique Binary Search Trees
- [LeetCode]95.Unique Binary Search Trees II
- [Leetcode] 95. Unique Binary Search Trees II
- LeetCode --- 95. Unique Binary Search Trees II
- [leetcode] 95.Unique Binary Search Trees II
- [leetcode] 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II LeetCode
- ***LeetCode 95. Unique Binary Search Trees II
- Leetcode 95. Unique Binary Search Trees II
- LeetCode *** 95. Unique Binary Search Trees II
- 【LeetCode】95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II
- [leetcode]95. Unique Binary Search Trees II
- [leetcode]95. Unique Binary Search Trees II
- [LeetCode] 95. Unique Binary Search Trees II
- LeetCode 95. Unique Binary Search Trees II
- [leetcode] 95. Unique Binary Search Trees II
- 基于proteus的ARM7TDMI-RTOS
- 资源的使用
- 一元购网站中间“-”的处理
- C++文件简单读入读出测试
- PyCUDA学习日记1
- 【一天一道LeetCode】#95. Unique Binary Search Trees II
- Caffe train 卡在 loading mean file from :不动
- Android 背景动画
- 【android】:gridView设置监听事件
- 1005 ProblemE
- thinkphp3.2【url地址大小写设置】
- 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Android的屏幕多样性支持
- Java多线程synchronized、ReentrantLock、ReentrantReadWriteLock 和StampedLock 的对比