思路
二叉搜索树(BST)的修剪功能。通过递归遍历树节点,移除所有值不在给定范围[low, high]内的节点。对于小于low的节点,保留其右子树;对于大于high的节点,保留其左子树。算法处理了根节点可能被移除的特殊情况,并重新连接父节点与保留的子树。最终返回修剪后的BST根节点,确保所有节点值都在指定范围内。
代码
cpp
class Solution {
public:
int l,h;
TreeNode* r;
int qx(TreeNode* a,TreeNode* syc,bool f) {
if(!a) {
return 0;
}
qx(a->left,a,0);
qx(a->right,a,1);
if(a->val<=l) {
a->left=nullptr;
if(a->val<l) {
if(a==r) {
r=a->right;
}
else {
if(syc) {
if(f) {
syc->right=a->right;
}
else {
syc->left=a->right;
}
}
}
}
}
else {
if(a->val>=h) {
a->right=nullptr;
if(a->val>h) {
if(a==r) {
r=a->left;
}
else {
if(syc) {
if(f) {
syc->right=a->left;
}
else {
syc->left=a->left;
}
}
}
}
}
}
return 0;
}
TreeNode* trimBST(TreeNode* root, int low, int high) {
l=low;
h=high;
r=root;
qx(r,nullptr,0);
return r;
}