修剪二叉搜索树

修剪二叉搜索树

给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

二叉搜索树是中序非递减,因此可能删除的节点在中间位置,不一定会在叶子节点位置。

#include "_myPrint.cpp"
#include "stack"
#include "queue"
using namespace std;


// 给定一个区间【low,high】 修减二叉搜索树 去掉不在该区间的值的节点
class Solution{
public:

    TreeNode* trimBST(TreeNode* root, int low, int high){
        if (!root) return nullptr;
        if (root -> val < low){
            right = trimBST(root -> right, low, high);
            return right;
        }
        if (root -> val > high){
            left = trimBST(root -> left, low, high);
            return left;
        }
        root -> left = trimBST(root -> left, low, high);
        root -> right = trimBST(root -> right, low, high);
        return root;
    }
};

int main(){
    Solution s;
    TreeNode* root = new TreeNode(8);
    TreeNode* l = new TreeNode(7);
    TreeNode* r = new TreeNode(9);
    TreeNode* lr = new TreeNode(7);
    TreeNode* rl = new TreeNode(8);
    root->left = l;
    root->right = r;
    l->right = lr;
    r->left=rl;
    vector<int> res = s.BSTMode(root);
    printCollection p;
    p.printVector(res);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值