669. 修剪二叉搜索树
代码随想录链接:代码随想录 (programmercarl.com)
最开始写错了,判断之后直接让root->right=右子树的递归结果了,这样忽略了root节点在 low high范围内的时候也要递归的处理左子树和右子树。
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(root==NULL) return root;
if(root->val<low){
TreeNode* right=trimBST(root->right,low,high);
return right;
}
if(root->val>high){
TreeNode* left=trimBST(root->left,low,high);
return left;
}
root->right=trimBST(root->right,low,high);
root->left=trimBST(root->left,low,high);
return root;
}
};
108.将有序数组转换为二叉搜索树
代码随想录链接:代码随想录 (programmercarl.com)
高度平衡
class Solution {
public:
TreeNode* traversal(vector<int>& nums, int left, int right){
if(left>right) return NULL;
int mid=left+(right-left)/2;
TreeNode* root=new TreeNode(nums[mid]);
root->right=traversal(nums,mid+1,right);
root->left=traversal(nums,left,mid-1);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode* root=traversal(nums,0,nums.size()-1);
return root;
}
};
538.把二叉搜索树转换为累加树
代码随想录链接:代码随想录 (programmercarl.com)
把值换成大于等于自身的节点值的和。反中序遍历。
class Solution {
public:
int pre=0;
void traversal(TreeNode* node){
if(node==NULL) return;
traversal(node->right);
node->val+=pre;
pre=node->val;
traversal(node->left);
}
TreeNode* convertBST(TreeNode* root) {
traversal(root);
return root;
}
};