代码随想录第23天| 二叉树9
669. 修剪二叉搜索树 (中等)☆
题目链接:669. 修剪二叉搜索树
代码随想录: 669. 修剪二叉搜索树
视频: 669. 修剪二叉搜索树
删除节点的思路很巧妙,直接把结果返回给要删除节点的父节点
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(!root) return NULL;
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 -> left = trimBST(root->left, low, high);
root -> right = trimBST(root->right, low, high);
return root;
}
};
108.将有序数组转换为二叉搜索树 (简单)
LeetCode题目 108.将有序数组转换为二叉搜索树
代码随想录: 108.将有序数组转换为二叉搜索树
思路:每次从数组中间位置取值
class Solution {
public:
TreeNode * traversal(vector<int> & nums, int l, int r){
if(l > r) return NULL; // 左闭右闭区间
int mid = l + (r - l) /2;
TreeNode * root = new TreeNode(nums[mid]);
root->left = traversal(nums, l, mid - 1);
root->right = traversal(nums, mid + 1, r);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return traversal(nums, 0, nums.size() -1);
}
};
538.把二叉搜索树转换为累加树 (中等)
LeetCode题目: 538.把二叉搜索树转换为累加树
代码随想录: 538.把二叉搜索树转换为累加树
反着中序遍历就行了
class Solution {
public:
int pre = 0;
TreeNode * traversal(TreeNode * root){
if(!root) return NULL;
traversal(root->right);
root->val += pre;
pre = root->val;
traversal(root->left);
return root;
}
TreeNode* convertBST(TreeNode* root) {
return traversal(root);
}
};