修剪二叉搜索树
给定一个二叉搜索树,同时给定最小边界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);
}