LeetCode 669. 修剪二叉搜索树

思路

  • 遍历所有节点,如果当前节点不在所给区间里,删除该点;否则
  • 如果该点要被删除,将其左右子树其中之一提上来即可
    • 根节点位于左右子树取值区间的中间,如果该点要被删除,那么一定存在不满足要求的子树,不可能两棵子树同时保留

代码

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int l, int r) {
        if(!root)   return NULL;
        if(root->val<l)//根节点小于区间左端点,删除一定不满足要求的左子树
            return trimBST(root->right,l,r);
        if(root->val>r)//根节点大于区间右端点,删除一定不满足要求的右子树
            return trimBST(root->left,l,r);
        //如果当前根节点满足要求,修剪其左右子树
        root->left=trimBST(root->left,l,r);
        root->right=trimBST(root->right,l,r);
        return root;
    }
};
posted @   穿过雾的阴霾  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示