当前位置:网站首页>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;
}
}
边栏推荐
- SSH连接远程主机等待时间过长的解决方法
- 问题随记 —— 在 edge 上看视频会绿屏
- Is AI too slow to design pictures and draw illustrations? 3 sets of practical brushes to save you
- Assignment examination questions of advanced English (III) for the course examination of Fujian Normal University in February 2022
- Apache service suspended asynchronous acceptex failed
- Apache服务挂起Asynchronous AcceptEx failed.
- Examination questions for the assignment of selected readings of British and American Literature in the course examination of Fujian Normal University in February 2022
- What is your income level in the country?
- Tensorboard quick start (pytoch uses tensorboard)
- 【RT-Thread】nxp rt10xx 设备驱动框架之--Audio搭建和使用
猜你喜欢

PS screen printing brush 131, many illustrators have followed suit
![[error reporting] omp: error 15: initializing libiomp5md dll, but found libiomp5md. dll already initialized.](/img/a0/4fc0e0741aad2885873e60f2af3387.jpg)
[error reporting] omp: error 15: initializing libiomp5md dll, but found libiomp5md. dll already initialized.

Great changes! National housing prices fell below the 10000 yuan mark

Swm32 series Tutorial 4 port mapping and serial port application

Select 3 fcpx plug-ins. Come and see if you like them

How to purchase Google colab members in China

Golang单元测试、Mock测试以及基准测试

Notes on problems -- watching videos on edge will make the screen green

Talk about several methods of interface optimization
![[UE4] brush Arctic pack high quality Arctic terrain pack](/img/e7/bc86bd8450b0b2bdec8980a2aa1a10.jpg)
[UE4] brush Arctic pack high quality Arctic terrain pack
随机推荐
企业级自定义表单引擎解决方案(十一)--表单规则引擎1
Web-ui automated testing - the most complete element positioning method
VM11289 WAService. js:2 Do not have __ e handler in component:
Visual studio "usually, each socket address (Protocol / network address / port) can only be used once“
AcWing 4489. Longest subsequence
What is your income level in the country?
人生还在迷茫?也许这些订阅号里有你需要的答案!
kubernetes资源对象介绍及常用命令(三)
[combinatorics] recursive equation (general solution structure of recursive equation with multiple roots | linear independent solution | general solution with multiple roots | solution example of recu
Javescript variable declaration -- VaR, let, const
Kubernetes resource object introduction and common commands (4)
一位普通程序员一天工作清单
[UE4] brush Arctic pack high quality Arctic terrain pack
C language string practice
What is the difference between cloud server and cloud virtual machine
[error reporting] omp: error 15: initializing libiomp5md dll, but found libiomp5md. dll already initialized.
Talk about several methods of interface optimization
PS screen printing brush 131, many illustrators have followed suit
Luogu: p2685 [tjoi2012] Bridge
Kubernetes resource object introduction and common commands (III)