
二叉搜索树BST
文章平均质量分 79
CP Coding
这个作者很懒,什么都没留下…
展开
-
LeetCode 538. Convert BST to Greater Tree - 二叉树(Binary Tree)系列题28
给定一棵二叉搜索树(Binary Search Tree),要求把它转换成一棵更大树(Greater Tree)。所谓更大树,就是把原二叉搜索树中的每一个节点值变成它自身值加上原树中比该节点值大的所有节点值的和。先来看一下如果给定的是一个数组,如何把数组中每个数变成它自身加上所有比它大的数的总和?其实只要先把数组排序,那么数组中每个数所在位置之后的所有数都是比它大的数,因此只要从后往前进行累加就可以达到目的。原创 2022-03-08 23:03:01 · 354 阅读 · 0 评论 -
LeetCode 776. Split BST - 二叉搜索树(Binary Search Tree)系列题15
根据二叉搜索树的特点,如果一个节点的值小于等于目标数,那么它的左子树所有节点都小于目标数;如果节点值大于目标数,那么它的右子树所有节点都大于目标数。因此可以分成以下两种情况来分析。原创 2022-01-21 12:03:27 · 794 阅读 · 0 评论 -
LeetCode 510. Inorder Successor in BST II - 二叉搜索树(Binary Search Tree)系列题14
题目给定一个二叉搜索树的某一个节点node,要求找出节点node的中序遍历的后继Successor,所谓后继就是树所有值大于node节点值的节点中值最小的那个节点。如果后继不存在就返回空节点。这题跟285. Inorder Successor in BST不同是,没有给定树的根节点,但是节点多了一个指针指向父节点。刷过285. Inorder Successor in BST中的第二种解法就会发现这题其实更简单。原创 2022-01-20 12:12:47 · 620 阅读 · 0 评论 -
LeetCode 1214. Two Sum BSTs - 二叉搜索树(Binary Search Tree)系列题13
题目给定两棵二叉搜索树和一个目标数,问是否在两棵树中各存在一个节点使得两个节点值的和等于目标数。如果看过653. Two Sum IV - Input is a BST中的解法,就会发现这题更简单。原创 2022-01-19 05:24:41 · 282 阅读 · 0 评论 -
LeetCode 653. Two Sum IV - Input is a BST - 二叉搜索树(Binary Search Tree)系列题12
题目给定一个二叉搜索树和一个目标数,问是否存在两个节点它们的数值和等于目标数。很容易想到跟数组的Two Sum题解法差不多。一种是利用一个hashmap;另一种是中序遍历BST得到一个有序数组,然后使用Two Pointers法。这也是这题被标注为easy的原因。其实这题还有一种解法就是不需要转换成数组就可以用Two Pointers法。原创 2022-01-19 04:18:59 · 236 阅读 · 0 评论 -
LeetCode 501. Find Mode in Binary Search Tree - 二叉搜索树(Binary Search Tree)系列题11
最简单的方法就是遍历整棵树,用一个hashmap记录所有数值出现的次数并算出最多次数,然后再遍历一遍hashmap找出所有出现次数最多的数值。这种解法没有用到二叉搜索树的特性而且空间复杂度是O(n)。很显然有更优解。原创 2022-01-18 17:00:52 · 314 阅读 · 0 评论 -
LeetCode 449. Serialize and Deserialize BST - 二叉搜索树(Binary Search Tree)系列题10
题目要求对二叉搜索树进行序列化和去序列化。所谓序列化就是把二叉搜索树转化成一个位序列,以致可以把它存在一个文件或内存里,或者通过网络传输。去序列化就是在接收端接收到二叉搜索树的序列,并把该序列恢复成原来的二叉搜索树。原创 2022-01-18 05:59:31 · 120 阅读 · 0 评论 -
LeetCode 333. Largest BST Subtree - 二叉搜索树(Binary Search Tree)系列题9
题目给定一棵二叉树,二叉树的每一个节点与该节点的所有子节点构成一棵子二叉树,要求从所有子二叉树中查找最大棵的二叉搜索树。原创 2022-01-17 05:29:14 · 297 阅读 · 0 评论 -
LeetCode 285. Inorder Successor in BST - 二叉搜索树(Binary Search Tree)系列题8
题目给定一个二叉搜索树的根节点root和树中的某一个节点p,要求出节点p的中序遍历的后继Successor,所谓后继就是树所有值大于p节点值的节点中值最小的那个节点。如果后继不存在就返回空节点。原创 2022-01-16 05:43:31 · 345 阅读 · 0 评论 -
LeetCode 272. Closest Binary Search Tree Value II - 二叉搜索树(Binary Search Tree)系列题7
这题也是给定一个二叉搜索树和一个目标数,跟270. Closest Binary Search Tree Value不同的是,这要求找出树中k个最接近目标数的节点。关于求k个最接近的数,很自然地想到用优先级队列。根据题意应该要用最大堆的优先级队列,比较函数比较的是节点值与目标值差的绝对值。原创 2022-01-16 02:58:50 · 313 阅读 · 0 评论 -
LeetCode 270. Closest Binary Search Tree Value - 二叉搜索树(Binary Search Tree)系列题6
题目给定一棵二叉搜索树和一个目标数,要求找到树中值最接近目标数的那个节点(两者差的绝对值最小)。解法跟查找树中是否存在一个值等于目标数的节点一样,基本思路就是利用二叉搜索树的特点,左子树所有节点值都小于根节点值,右子树所有节点值都大于根节点值。原创 2022-01-15 20:56:21 · 280 阅读 · 0 评论 -
LeetCode 255. Verify Preorder Sequence in Binary Search Tree - 二叉搜索树(Binary Search Tree)系列题5
题目大意是给定一个数组,问数组中各数值的顺序是否是一棵二叉搜索树的前序遍历的顺序。其实这题还可以换种问法,给定一棵二叉树的前序遍历的数组,验证其是否为一棵有效的二叉搜索树。原创 2022-01-15 20:35:43 · 313 阅读 · 0 评论 -
LeetCode 173. Binary Search Tree Iterator - 二叉搜索树(Binary Search Tree)系列题4
解法:其实就是把二叉搜索树的中序遍历迭代法的代码分开放在几个接口函数里。原创 2022-01-14 22:42:44 · 166 阅读 · 0 评论 -
LeetCode 98. Validate Binary Search Tree - 二叉搜索树(Binary Search Tree)系列题3
题目要求验证一棵二叉树是否为二叉搜索树(BST: Binary Search Tree)。首先要明白二叉搜索树的特点,对于一个节点,其左子树的所有节点值不能大于等于该节点值,其右子树的所有节点值不能小于等于该节点值,还有就是左右子树也都必须是二叉搜索树。根据以上分析,很容易想到用递归法。本题可以有两种递归法,分别是自顶向下和自底向上。原创 2022-01-14 04:19:05 · 306 阅读 · 0 评论 -
LeetCode 95. Unique Binary Search Trees II - 二叉搜索树(Binary Search Tree)系列题2
这题是96. Unique Binary Search Trees的拓展,不仅要知道树的个数,还要求构造每棵树并且返回每棵树的根节点。基本思路跟96. Unique Binary Search Trees差不多,用递归法,但是由于要构造具体的二叉搜索树,递归函数的输入就不能是个数而应该是一个范围。原创 2022-01-13 04:43:51 · 246 阅读 · 0 评论 -
LeetCode 96. Unique Binary Search Trees - 二叉搜索树(Binary Search Tree)系列题1
题目大意是给定一个正整数n,如果以值从1到n创建n个节点,那么这n个节点能构造出几科不一样的二叉搜索树。二叉搜索的特点是左子树所有节点值不大于根节点值,右子树所有节点值不小于根节点值。如果我们从1~n范围内取一个值i作为根节点,那么左子树的节点个数就是i-1个, 右子树的节点个数是n-i个,如果能知道i-1个节点和n-i个节点分别能构造出多少棵二叉搜索树,那么二者相乘就是以i为根节点的二叉搜索树的个数。原创 2022-01-12 19:05:02 · 329 阅读 · 0 评论