当前位置:网站首页>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;
}
}
边栏推荐
- Detailed explanation of common network attacks
- [UE4] brush Arctic pack high quality Arctic terrain pack
- [combinatorics] recursive equation (example of solving recursive equation without multiple roots | complete process of solving recursive equation without multiple roots)
- Redis:关于列表List类型数据的操作命令
- Luogu: p1155 [noip2008 improvement group] double stack sorting (bipartite graph, simulation)
- 1146_ SiCp learning notes_ exponentiation
- Golang unit test, mock test and benchmark test
- 新库上线 | CnOpenData中国观鸟记录数据
- Notes on problems -- watching videos on edge will make the screen green
- PS screen printing brush 131, many illustrators have followed suit
猜你喜欢
Golang unit test, mock test and benchmark test
Test your trained model
QT learning diary 9 - dialog box
【RT-Thread】nxp rt10xx 设备驱动框架之--Audio搭建和使用
Free data | new library online | cnopendata complete data of China's insurance intermediary outlets
Type conversion, variable
Unity notes unityxr simple to use
Tensorboard quick start (pytoch uses tensorboard)
大变局!全国房价,跌破万元大关
新库上线 | CnOpenData中国保险机构网点全集数据
随机推荐
Free data | new library online | cnopendata complete data of China's insurance intermediary outlets
Javescript variable declaration -- VaR, let, const
Open vsftpd port under iptables firewall
kubernetes资源对象介绍及常用命令(四)
Simple use of unity pen XR grab
Is AI too slow to design pictures and draw illustrations? 3 sets of practical brushes to save you
Talk about several methods of interface optimization
QT learning diary 9 - dialog box
University of Electronic Science and technology, accounting computerization, spring 20 final exam [standard answer]
How to train mask r-cnn model with your own data
设计电商秒杀
One brush 146 force buckle hot question-3 longest substring without repeated characters (m)
UE4 official charging resources, with a total price of several thousand
Enterprise custom form engine solution (XI) -- form rule engine 1
Solution to long waiting time of SSH connection to remote host
免费数据 | 新库上线 | CnOpenData中国保险中介机构网点全集数据
Simple configuration of postfix server
Hongmeng fourth training
1146_ SiCp learning notes_ exponentiation
1164 Good in C