- 669. 修剪二叉搜索树
- 108.将有序数组转换为二叉搜索树
- 538.把二叉搜索树转换为累加树
669. 修剪二叉搜索树 : 找到不符合条件就遍历他符合条件的子节点,然后再整体遍历
TreeNode* get1(TreeNode* root, int low, int high) {
// 终止条件
if (root == nullptr)
return root;
if (root->val > high) {
TreeNode* left = get1(root->left, low, high);
return left;
}
if (root->val < low) {
TreeNode* right = get1(root->right, low, high);
return right;
}
root->left = get1(root->left, low, high);
root->right = get1(root->right, low, high);
return root;
}
TreeNode* trimBST(TreeNode* root, int low, int high) {
return get1(root, low, high);
}
108.将有序数组转换为二叉搜索树
TreeNode* rev( vector<int>& nums,int left,int right){
//终止条件
if(left>right){
return nullptr;
}
int mid=left+(right-left)/2;
TreeNode* roo=new TreeNode(nums[mid]);
roo->left=rev(nums,left,mid-1);
roo->right=rev(nums,mid+1,right);
return roo;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {//le ri 只要位置
return rev(nums,0,nums.size()-1);
}
538.把二叉搜索树转换为累加树
int sum = 0; // 全局变量用于累加节点的值
TreeNode* convertBST(TreeNode* root) {
if (root == nullptr) return nullptr;
// 先遍历右子树
convertBST(root->right);
// 更新当前节点的值
sum += root->val;
root->val = sum;
// 再遍历左子树
convertBST(root->left);
return root;
}