新博文地址:[leetcode]Unique Binary Search Trees II
Unique Binary Search Trees II
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
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
这道题看起来真的挺唬人的。但是搞明白之后还算好,提示中说用DP,但是还是用了DFS,总是感觉DP没法做,可能还是DP不熟吧。
思想是模拟人工建树的过程:
首先,一个节点时,已经好了。
n个节点时候(n > 1),第一个节点的左子树一定为空,同理最后一个节点的右子树一定为空。那么中间节点呢,假设中间节点为k(1<k<n),1~k-1是其左子树,k+1~n是其右子树,然后递归实现1~k-1和k+1~n,典型的分治策略。
List<TreeNode> result = new ArrayList<TreeNode>(); public List<TreeNode> generateTrees(int n) { if (n <= 0) { result.add(null);//坑爹啊,非要加个null,加你妹啊!!! return result; } return generateSubTree(1, n); } private List<TreeNode> generateSubTree(int begin,int end) { if (begin == end) { List<TreeNode> leaf = new ArrayList<TreeNode>(); leaf.add(new TreeNode(begin)); return leaf; } List<TreeNode> list = new ArrayList<TreeNode>(); for (int i = begin; i <= end; i++) { if (i == begin) { List<TreeNode> right = generateSubTree(i + 1, end); for (TreeNode tem : right) { TreeNode node = new TreeNode(i); node.right = tem; list.add(node); } } else if (i == end) { List<TreeNode> left = generateSubTree( begin, end - 1); for (TreeNode tem : left) { TreeNode node = new TreeNode(i); node.left = tem; list.add(node); } } else { List<TreeNode> left = generateSubTree( begin, i - 1); List<TreeNode> right = generateSubTree( i + 1, end); for (TreeNode temLeft : left) { for (TreeNode temRight : right) { TreeNode node = new TreeNode(i); node.left = temLeft; node.right = temRight; list.add(node); } } } } return list; }
我去,看了别人的代码,貌似都是清一色的分治法,只不过人家的代码简洁多了,果然自己是渣渣
相关推荐
1975年,来自斯坦福大学的Jon Louis Bentley在ACM杂志上发表的一篇论文:Multidimensional Binary Search Trees Used for Associative Searching 中正式提出和阐述的了把空间划分为多个部分的k-d树。
python python_leetcode题解之095_Unique_Binary_Search_Trees_II
Self-Adjusting Binary Search TreesDANIEL DOMINIC SLEATOR A N D ROBERT ENDRE TARJANA T&T Bell Laboratories, Murray Hill, NJAbstract. The splay tree, a self-adjusting form of binary search tree, is ...
javascript js_leetcode题解之95-unique-binary-search-trees-ii.js
c语言基础 c语言_leetcode题解之0095_unique_binary_search_trees_ii.zip
python python_leetcode题解之096_Unique_Binary_Search_Trees
javascript js_leetcode题解之96-unique-binary-search-trees.js
c语言基础 c语言_leetcode题解之0096_unique_binary_search_trees.zip
二元搜索树(Binary Search Tree, BST)是一种特殊的二元树,其中每个节点的值大于其左子树中的所有节点值,小于其右子树中的所有节点值。BST支持高效的查找、插入和删除操作,时间复杂度可达到O(log n)。 在`...
A binary search algorithm (or binary chop) is a technique for finding a particular value in a sorted list. It makes progressively better guesses, and closes in on the sought value, by comparing an ...
在Java编程语言中,`Arrays`类是Java.util包下的一个非常重要的工具类,它提供了大量用于操作数组的静态方法,其中包括我们今天要讨论的`binarySearch()`方法。`Arrays.binarySearch()`方法允许我们在有序数组中查找...
标题中的"BinarySearch"指的是二分查找算法,这是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分为三个部分:小于目标值的元素、等于目标值的元素和大于目标值的元素,然后逐步缩小搜索范围,直到...
在Knuth的经典论文《Optimum Binary Search Trees》中,他首先回顾了二叉查找树的基本概念及工作原理,即通过比较节点值来决定搜索方向,从而实现快速查找。具体来说,当需要在一个二叉查找树中查找某个元素时,可以...
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 ...
在MATLAB中,二进制搜索(Binary Search)是一种高效查找算法,尤其适用于已排序的数据。这个"matlab开发-BinarySearch"项目提供了一个名为`bsearch.m`的MATLAB函数,用于在向量中执行二进制查找操作。下面我们将...
- 在`binarySearch`函数中实现上述的二分搜索逻辑,包括计算中间索引、比较元素和更新边界。 总的来说,二分搜索是计算机科学中一种重要的搜索算法,尤其适用于处理大量有序数据。在C语言中实现二分搜索,可以显著...
二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST...
二叉搜索树(Binary Search Tree,BST)是一种特殊类型的二叉树,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉搜索树中,对于任意节点,其左子树中的所有...
在这个“BinarySearch_C++_算法_折半查找_”的项目中,我们将会探讨如何使用C++实现这个算法。 首先,我们要明白二分查找的基本思想。假设我们有一个已排序的数组,我们需要查找一个特定值。我们从数组的中间开始...
在MATLAB环境中,二进制搜索(Binary Search)是一种高效的查找算法,主要应用于已排序的数组。本项目“matlab开发-Binarysearch”显然聚焦于如何在MATLAB中实现二进制搜索算法。该算法利用分治思想,通过不断缩小...