Unique Binary Search Trees II -- leetcode
来源:互联网 发布:java递归排序问题 编辑:程序博客网 时间:2024/05/16 12:08
iven 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
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
基本思路:递归
1. 依次以每个元素为根节点
2. 进行递归,该元素左边的所有元素,返回一组数的集合。
3. 该元素右边的所有元素,生成一组数的集合。
4. 分别从左边、右边集合各挑选一棵树作为左子树和右子树,连同根结点。组成一个棵树。
在leetcode上,实际执行时间为27ms。
/** * Definition for binary tree * 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 *> ans; generateTrees(ans, 1, n+1); return ans; } void generateTrees(vector<TreeNode *> &ans, int start, int stop) { for (int i=start; i<stop; i++) { vector<TreeNode *> lefts; generateTrees(lefts, start, i); for (int j=0; j<lefts.size(); j++) { vector<TreeNode *> rights; generateTrees(rights, i+1, stop); for (int k=0; k<rights.size(); k++) { TreeNode *root = new TreeNode(i); root->left = lefts[j]; root->right = rights[k]; ans.push_back(root); } } } if (ans.empty()) ans.push_back(0); }};
0 0
- LeetCode: Unique Binary Search Trees II
- LeetCode : Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- leetcode Unique Binary Search Trees II
- [LeetCode]Unique Binary Search Trees II
- [leetcode]Unique Binary Search Trees II
- LeetCode-Unique Binary Search Trees II
- [leetcode] Unique Binary Search Trees II
- LeetCode - Unique Binary Search Trees II
- LeetCode 95: Unique Binary Search Trees II
- Leetcode Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- Leetcode: Unique Binary Search Trees II
- leetcode Unique Binary Search Trees II
- 【Leetcode】Unique Binary Search Trees II
- LeetCode | Unique Binary Search Trees II
- Leetcode Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- Symmetric Tree —— Leetcode
- 多线程断点下载详解
- 二叉搜索树与双向链表
- Android--ADT与SDK之间的关系
- Android仿美团购买悬浮效果
- Unique Binary Search Trees II -- leetcode
- 【bzoj1040】【ZJOI2008】【骑士】
- 最最最简单的计算器
- C++中两个数值交换的几种方法
- 无处不在的编程思想
- 剑指Offer之 - 替换空格
- POJ1144.Network——无向图的割点
- 第八周项目三:分数类中的运算符重载(一)
- 将log4net封装在类库中的方法