day-23 代码随想录算法训练营(19)part09

669.修剪二叉搜索树

思路一:根据二叉搜索树的特性进行中间值与去区间值判断,有三种情况:1.在区间中,所以左右子树都可能在区间中; 2.在区间外面的左侧,必然只有右子树可能存在区间中;3.在区间外面的右侧,必然只有左子树可能存在区间中思路二:优化代码,不考虑在区间中的,直接考虑不在区间中的;1.当处于区间左侧,只需从右子节点开始递归查找;2.当处于区间右侧,只需从左子节点开始递归查找。

class Solution {
public:
    
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        //思路:首先考虑当前中间节点有三种情况,在low左边,在high右边
        if(root==nullptr) return nullptr;
        //中间节点在区间左边
        if(root->valright,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;
    }
};

你可能感兴趣的:(算法学习,代码随想录算法训练营(19期),C++,算法,数据结构)