- 浏览: 184681 次
- 性别:
- 来自: 济南
文章分类
最新评论
有关unique 二叉搜索树的题目有两个,第一道题目是确定二叉搜索树的个数,第二道题目是输出所有的二叉搜索树,这两道题目属于比较难的题目,对于解决它们的方法也是比较重要的,我们要掌握。
1,Unique Binary Search Trees
给定一个正整数n,确定有多少个不同的二叉搜索树,树的节点取值范围为(1....n)。
例如:给定n = 3,输出为5
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
求解这个问题我们不妨从简单开始分析,我们设定一个数组result来表示n在不同值下有几种不同的二叉树。当n为0时,这时是一颗空树,result[0] = 1; 当n = 1时,只有一种情况,result[1] = 1; 当n = 2 时,两个数可以分别作为根节点,result[2] = 2; 当n = 3时,正如题目给出的结果,result[3] = 5;我们从这里可以发现一些规律,result[n] = result[0] * result[n - 1] + result[1] * result[n -2] + result[n-1] * result[0] (n > 1); 我们会发现这正好符合卡特兰数的递推式,有了递推式我们就很容易的写出代码了,代码如下:
2,Unique Binary Search Trees II
给定一个正整数n,输出所有不同的二叉搜索树,数的节点取值范围为(1....n)。
例如:给定n = 3
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
这道题目比上一道题目要难,要输出所有不同的二叉搜索树,解决树的问题我们首先想到的就是用递归来解决,对于这道题目,我们参考之前介绍过的一道题目Different Ways to Add Parentheses,我们同样在for循环中递归解决子问题,这个方法需要我们通过题目来巩固,代码如下:
1,Unique Binary Search Trees
给定一个正整数n,确定有多少个不同的二叉搜索树,树的节点取值范围为(1....n)。
例如:给定n = 3,输出为5
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
求解这个问题我们不妨从简单开始分析,我们设定一个数组result来表示n在不同值下有几种不同的二叉树。当n为0时,这时是一颗空树,result[0] = 1; 当n = 1时,只有一种情况,result[1] = 1; 当n = 2 时,两个数可以分别作为根节点,result[2] = 2; 当n = 3时,正如题目给出的结果,result[3] = 5;我们从这里可以发现一些规律,result[n] = result[0] * result[n - 1] + result[1] * result[n -2] + result[n-1] * result[0] (n > 1); 我们会发现这正好符合卡特兰数的递推式,有了递推式我们就很容易的写出代码了,代码如下:
public class Solution { public int numTrees(int n) { int[] result = new int[n+1]; result[0] = 1; result[1] = 1; for(int i = 2; i <= n; i++) for(int j = 0; j < i; j++) { result[i] += result[j] * result[i-j-1]; } return result[n]; } }
2,Unique Binary Search Trees II
给定一个正整数n,输出所有不同的二叉搜索树,数的节点取值范围为(1....n)。
例如:给定n = 3
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
这道题目比上一道题目要难,要输出所有不同的二叉搜索树,解决树的问题我们首先想到的就是用递归来解决,对于这道题目,我们参考之前介绍过的一道题目Different Ways to Add Parentheses,我们同样在for循环中递归解决子问题,这个方法需要我们通过题目来巩固,代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<TreeNode> generateTrees(int n) { List<TreeNode> result = new ArrayList<TreeNode>(); if(n == 0) return result; return generateSubtrees(1, n); } public List<TreeNode> generateSubtrees(int start, int n) { List<TreeNode> result = new ArrayList<TreeNode>(); if(start > n) { result.add(null); return result; } for(int i = start; i <= n; i++) { List<TreeNode> left = generateSubtrees(start, i - 1); List<TreeNode> right = generateSubtrees(i + 1, n); for(TreeNode leftnode : left) for(TreeNode rightnode : right) { TreeNode root = new TreeNode(i); root.left = leftnode; root.right = rightnode; result.add(root); } } return result; } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 269Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 271You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 388Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 378Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 503Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 568Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 482Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 666Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 472The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 432Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 582Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 590Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 429All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 904Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 933Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 606Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 690Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 855Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 788You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 721For a undirected graph with tre ...
相关推荐
python python_leetcode题解之096_Unique_Binary_Search_Trees
javascript js_leetcode题解之96-unique-binary-search-trees.js
python python_leetcode题解之095_Unique_Binary_Search_Trees_II
c语言基础 c语言_leetcode题解之0096_unique_binary_search_trees.zip
javascript js_leetcode题解之95-unique-binary-search-trees-ii.js
c语言基础 c语言_leetcode题解之0095_unique_binary_search_trees_ii.zip
Both the left and right subtrees must also be binary search trees. A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled ...
Both the left and right subtrees must also be binary search trees. A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled ...
leetcode python 001 Algorithm 用python和java解决了Leetcode上部分问题,另外还有对常规算法和机器学习算法的一些实现,例如用遗传算法解物流配送问题。...Search Trees Python 2017/11/28 Medium 09
Unique Binary Search Trees 本题参考了 里面的*How Many Binary Trees Are There?*章节。 The first few terms: C(0) = 1 C(1) = C(0)C(0) = 1 C(2) = C(0)C(1) + C(1)C(0) = 2 C(3) = C(0)C(2) + C(1)C(1)
leetcode添加元素使和等于 Leetcode-tree 94题 Binary ...Search Trees 这道题我们使用了动态规划的方法。说到动态规划我们这里先总结一下动态规划类型的题该如何做。 动态规划题目特点: 计数型: -有
- **Binary B-Trees**: Special case of B-trees optimized for binary trees. **Priority Queues**: Data structures that manage items based on priority, often implemented using heaps. This detailed ...
- Unique Binary Search Trees:不同的二叉搜索树的个数。 - Happy Number:一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,也可能是无限...
【描述】中的"Unique Binary Search Trees"提到了一种特定的LeetCode问题,即"唯一的二叉搜索树"。这个问题要求计算给定整数n的所有不同结构的二叉搜索树的数量。二叉搜索树是一种特殊的二叉树,其中每个节点的左...
* [Binary Search Tree](https://github.com/kamyu104/LeetCode#binary-search-tree) * [Breadth-First Search](https://github.com/kamyu104/LeetCode#breadth-first-search) * [Depth-First Search]...
- **UniqueBinarySearchTrees** - 计算不同的二叉搜索树的数量。 - **UpdateBits** - 更新一个整数的某些位。 - **FastPower** - 快速幂运算。 - **HashFunction** - 设计算法的哈希函数。 - **Count1inBinary**...
- **唯一二叉搜索树(Unique Binary Search Trees)**: 不同的二叉搜索树的数量。 #### 位操作技巧 - **更新位(Update Bits)**: 在一个整数中更新若干位。 - **快速幂(Fast Power)**: 快速计算一个数的幂。 #### ...
96.unique-binary-search-trees.cpp [TODO] 70. 爬楼梯.cpp [TODO] 746. min-cost-climbing-stairs.cpp 第 4 天: [待办事项] leetcode/1143。 最长公共子序列.cpp 第 5 天: [待办事项] leetcode/221。 最大平方....
Allows keep record in the manner of trees. Each record can have record elements-branches and itself be an element to other parental record. Component TDBGridEh supports to show the tree-type ...