当前位置:网站首页>Leetcode 669 pruning binary search tree -- recursive method and iterative method
Leetcode 669 pruning binary search tree -- recursive method and iterative method
2022-07-03 17:27:00 【Hello, I'm Boger】
source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/trim-a-binary-search-tree
The question :
Give you the root node of the binary search tree root , At the same time, the minimum boundary is given low And the maximum boundary high. By pruning the binary search tree , Make the values of all nodes in [low, high] in . Pruning trees Should not be Change the relative structure of the elements retained in the tree ( namely , If not removed , The original relationship between father and son should be preserved ). Can prove that , There is The only answer .
So the result should return the new root node of the pruned binary search tree . Be careful , The root node may change according to the given boundary .
Example 1:
Input :root = [1,0,2], low = 1, high = 2
Output :[1,null,2]
Example 2:
Input :root = [3,0,4,null,2,null,null,1], low = 1, high = 3
Output :[3,2,null,1]
Tips :
The number of nodes in the tree is in the range [1, 104] Inside
0 <= Node.val <= 104
The value of each node in the tree is only Of
Topic data input is an effective binary search tree
0 <= low <= high <= 104
Ideas :
Let's start with the recursive method :
Recursive method , You need to determine the parameters of the recursive method first 、 Return value . In fact, this problem involves the reconstruction of binary tree , So with the help of recursive method, return the form of node , It simplifies the code .
- When the current node traversed is less than the minimum value , Then the nodes in its left subtree are also less than the lowest value , We traverse directly to its right subtree .
- Empathy , When the current node traversed is greater than the maximum value , Then the nodes in its right subtree are also greater than the lowest value , We traverse directly to its left subtree .
- If the value of the current node is in the range , Then this node is reserved , Let's traverse its left and right subtrees to see if there is anything to refactor , Finally, return the current node to
Recursive method Java Code :
class Solution {
public TreeNode trimBST(TreeNode root, int low, int high) {
if (root == null) return null;
if (root.val < low) return trimBST(root.right, low, high);
if (root.val > high) return trimBST(root.left, low, high);
root.left = trimBST(root.left, low, high);
root.right = trimBST(root.right, low, high);
return root;
}
}
The following is the idea of iterative method :
First, we will root Adjust to nodes in the range , Then we'll talk about root Cut the nodes that are not in the range in the left and right subtrees of .
So how to cut ?
If it is traversing to the current node , Judge whether the current node is within the range , If it's not in range , Then discard the current node , In this way , You need to record the parent node of the current node ( In other topics, you may also need to record whether the current node is the left node or the right node of the parent node ), This will be more troublesome .
Then let's just Judge whether the child node of the current node needs to be cut , If the child node of the current node is not in the range , We directly use the son node of the son node to replace the son node of the current node ( I didn't expect it to be a little windy ). Do this , It is much more convenient in cutting operation !
Iterative method Java Code :
class Solution {
public TreeNode trimBST(TreeNode root, int low, int high) {
// First adjust root To the extent
while (root != null && (root.val < low || root.val > high)) {
if (root.val < low) root = root.right;
else root = root.left;
}
TreeNode cur = root;
// cut off root Nodes not in the range in the left subtree
while (cur != null) {
while (cur.left != null && cur.left.val < low) cur.left = cur.left.right;
cur = cur.left;
}
cur = root;
// cut off root Nodes not in the range in the right subtree
while (cur != null) {
while (cur.right != null && cur.right.val > high) cur.right = cur.right.left;
cur = cur.right;
}
return root;
}
}
边栏推荐
- AcWing 4489. Longest subsequence
- PHP online confusion encryption tutorial sharing + basically no solution
- 设计电商秒杀
- 人生还在迷茫?也许这些订阅号里有你需要的答案!
- Tensorboard quick start (pytoch uses tensorboard)
- [RT thread] construction and use of --hwtimer of NXP rt10xx device driver framework
- Kotlin学习快速入门(7)——扩展的妙用
- [combinatorics] recursive equation (special solution example 1 Hannover tower complete solution process | special solution example 2 special solution processing when the characteristic root is 1)
- Rsync remote synchronization
- Simple configuration of postfix server
猜你喜欢
PHP online confusion encryption tutorial sharing + basically no solution
Select 3 fcpx plug-ins. Come and see if you like them
How do large consumer enterprises make digital transformation?
Vs2013 has blocked the installer, and ie10 needs to be installed
[UE4] brush Arctic pack high quality Arctic terrain pack
Swm32 series Tutorial 4 port mapping and serial port application
1164 Good in C
Luogu: p2685 [tjoi2012] Bridge
[error reporting] omp: error 15: initializing libiomp5md dll, but found libiomp5md. dll already initialized.
【JokerのZYNQ7020】DDS_ Compiler。
随机推荐
Where is the monitoring page of RDS database?
绝对定位时元素水平垂直居中
One brush 145 force deduction hot question-2 sum of two numbers (m)
[RT thread] NXP rt10xx device driver framework -- pin construction and use
PS screen printing brush 131, many illustrators have followed suit
[combinatorics] recursive equation (special solution form | special solution solving method | special solution example)
LeetCode13.罗马数字转整数(三种解法)
One brush 146 force buckle hot question-3 longest substring without repeated characters (m)
QT学习日记9——对话框
C language modifies files by line
Web-ui automated testing - the most complete element positioning method
Apache service suspended asynchronous acceptex failed
POM in idea XML graying solution
新库上线 | CnOpenData中国观鸟记录数据
Golang单元测试、Mock测试以及基准测试
29: Chapter 3: develop Passport Service: 12: develop [obtain user account information, interface]; (use VO class to package the found data to meet the requirements of the interface for the returned da
Qt调节Win屏幕亮度和声音大小
Kotlin learning quick start (7) -- wonderful use of expansion
The largest matrix (H) in a brush 143 monotone stack 84 histogram
One brush 147-force deduction hot question-4 find the median of two positive arrays (H)