当前位置:网站首页>669. Prune binary search tree ●●
669. Prune binary search tree ●●
2022-07-05 04:50:00 【chenyfan_】
669. Prune the binary search tree ●●
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 .
Input :root = [3,0,4,null,2,null,null,1], low = 1, high = 3
Output :[3,2,null,1]
For binary search trees ,
If root->val < low, Then the pruned binary tree must appear on the right of the root node ;
If root->val > high, Then the pruned binary tree must appear on the left of the root node .
recursive
Time complexity :O(N), among N Are all the nodes of a given tree . We can visit each node at most once .
Spatial complexity :O(N), Even if we don't explicitly use any additional memory , In the worst case , The stack of our recursive calls may be as large as the number of nodes .
- Traverse from top to bottom , After pruning a node , You need to judge this node again ( Return to the pruned subtree );
class Solution {
public:
TreeNode* pre = nullptr;
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(root == nullptr) return nullptr;
if(root->val < low){
return trimBST(root->right, low, high); // Return to the pruned right subtree
}else if(root->val > high){
return trimBST(root->left, low, high); // Return to the pruned left subtree
}
root->left = trimBST(root->left, low, high); // Prune the left subtree
root->right = trimBST(root->right, low, high); // Prune right subtree
return root;
}
};
- From the bottom up , Pruning the subtree does not affect the structure of the nodes above , At the same time, you can traverse the whole tree without re judging a node .
class Solution {
public:
TreeNode* pre = nullptr;
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(root == nullptr) return nullptr;
root->left = trimBST(root->left, low, high);
root->right = trimBST(root->right, low, high);
if(root->val < low){
// root->left = nullptr; // Delete left subtree
return root->right; // And replace the node with a right subtree
}else if(root->val > high){
// root->right = nullptr; // Delete the right subtree
return root->left; // And replace the node with the left subtree
}
return root;
}
};
iteration
Due to the orderliness of the search tree , Therefore, there is no need to use the stack to simulate the recursive process , The process is :
- First put the root node root Move to the range , Determine the new root node ;
- Handle unqualified nodes in the left subtree of the current root node ;
- Handle unqualified nodes in the right subtree of the current root node .
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(root == nullptr) return nullptr;
// Determine the root node in the interval
while(root != nullptr){
if(root->val < low){
root = root->right;
}else if(root->val > high){
root = root->left;
}else{
break;
}
}
// here root Already in [low, high] Within the scope of , Handle left child element less than low The situation of
TreeNode* curr = root;
while(curr != nullptr){
// 【 Notice that this is while loop , Until we find the qualified > low Replace the left child node of 】
while(curr->left != nullptr && curr->left->val < low){
curr->left = curr->left->right;
}
curr = curr->left;
}
// here root Already in [low, high] Within the scope of , Deal with the right child high The situation of
curr = root;
while(curr != nullptr){
// 【 Notice that this is while loop 】
while(curr->right != nullptr && curr->right->val > high){
curr->right = curr->right->left;
}
curr = curr->right;
}
return root;
}
};
边栏推荐
- Autocad-- dynamic zoom
- 3 minutes learn to create Google account and email detailed tutorial!
- Invalid bound statement (not found) in idea -- problem solving
- Use assimp library to read MTL file data
- Interface joint commissioning test script optimization V5.0 (end)
- Fluent objects and lists
- Thinking of 2022 American College Students' mathematical modeling competition
- 次小生成树
- AutoCAD - feature matching
- Wenet: E2E speech recognition tool for industrial implementation
猜你喜欢

Discussion on the dimension of confrontation subspace

質量體系建設之路的分分合合

Raki's notes on reading paper: code and named entity recognition in stackoverflow
![[groovy] closure (closure as function parameter | code example)](/img/a6/a4ed401acfb61f85eb08daa15a8a80.jpg)
[groovy] closure (closure as function parameter | code example)

Observable time series data downsampling practice in Prometheus
![[groovy] closure (Introduction to closure class closure | this, owner, delegate member assignment and source code analysis)](/img/aa/3c8b7b27e322417777d1315b9a5a8f.jpg)
[groovy] closure (Introduction to closure class closure | this, owner, delegate member assignment and source code analysis)

Wenet: E2E speech recognition tool for industrial implementation

介绍汉明距离及计算示例

【acwing】836. Merge sets

Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套
随机推荐
Neural network and deep learning Chapter 1: introduction reading questions
windows下Redis-cluster集群搭建
Introduce Hamming distance and calculation examples
AutoCAD - isometric annotation
[groovy] closure (Introduction to closure class closure | this, owner, delegate member assignment and source code analysis)
English topic assignment (27)
CUDA Programming atomic operation atomicadd reports error err:msb3721, return code 1
【acwing】836. Merge sets
CSDN body auto generate directory
"Measuring curve length" of CAD dream drawing
【Leetcode】1352. 最后 K 个数的乘积
Thematic information | carbon, carbon neutrality, low carbon, carbon emissions - 22.1.9
Wenet: E2E speech recognition tool for industrial implementation
Discussion on the dimension of confrontation subspace
[crampon game] MC tutorial - first day of survival
Is $20billion a little less? Cisco is interested in Splunk?
Solutions and answers for the 2021 Shenzhen cup
[Business Research Report] Research Report on male consumption trends in other economic times -- with download link
AutoCAD - full screen display
计组笔记(1)——校验码、原补码乘除计算、浮点数计算
