669. 修剪二叉搜索树
题目链接/文章讲解: 代码随想录
视频讲解: 你修剪的方式不对,我来给你纠正一下!| LeetCode:669. 修剪二叉搜索树_哔哩哔哩_bilibili
TreeNode* trimBST(TreeNode* root, int low, int high) {
if (root == NULL) return root;
if (root->left && root->left->val < low) {
root->left = root->left->right;
}
if (root->right && root->right->val > high) {
root->right = root->right->left;
}
if (root->val > high) {
root = root->left;
if (root == NULL) return NULL;
}
if (root->val < low) {
root = root->right;
if (root == NULL) return NULL;
}
trimBST(root->left, low, high);
trimBST(root->right, low, high);
return root;
}
解法有问题还没找到问题出在哪
108.将有序数组转换为二叉搜索树
视频讲解:构造平衡二叉搜索树!| LeetCode:108.将有序数组转换为二叉搜索树_哔哩哔哩_bilibili
TreeNode* sortedArrayToBST(vector<int>& nums) {
if (nums.empty()) return NULL;
int len = nums.size();
TreeNode* root = new TreeNode(nums[len/2]);// 构建根
vector<int> left(nums.begin(), nums.begin()+len/2);// 划分左子树
vector<int> right(nums.begin()+len/2+1,nums.end());// 划分右子树
root->left = sortedArrayToBST(left);
root->right = sortedArrayToBST(right);
return root;
}
538.把二叉搜索树转换为累加树
视频讲解:普大喜奔!二叉树章节已全部更完啦!| LeetCode:538.把二叉搜索树转换为累加树_哔哩哔哩_bilibili
- 对于一个节点如果树中有其他节点的值大于他,更新其值为他们节点值之和
- 对于二叉搜索树,利用其有序性,按照右中左的顺序从最右下角开始将其值不断累加
TreeNode* post;
TreeNode* convertBST(TreeNode* root) {
if (root == NULL) return root;// 终止条件
if (root->right) convertBST(root->right); // 右
if (post != NULL) {
root->val += post->val; // 更新节点值
}
post = root; // 指针前移
if (root->left) convertBST(root->left); // 左
return root;
}