代码随想录算法训练营第二十一天 | 669. 修剪二叉搜索树, 108.将有序数组转换为二叉搜索树 & 538.把二叉搜索树转换为累加树
669. Trim a Binary Search Tree
思路:直接看的视频
题目链接:669. Trim a Binary Search Tree
文章讲解:修剪二叉搜索树
视频讲解:修剪二叉搜索树
我的代码:
Python:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
if not root:
return None
if root.val < low:
return self.trimBST(root.right, low, high)
if root.val > high:
return self.trimBST(root.left, low, high)
root.left = self.trimBST(root.left, low, high)
root.right = self.trimBST(root.right, low, high)
return root
108. Convert Sorted Array to Binary Search Tree
思路:这题简单,能想到。
题目链接:108. Convert Sorted Array to Binary Search Tree
文章讲解:将有序数组转换为二叉搜索树
视频讲解:将有序数组转换为二叉搜索树
我的代码:
C++:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
TreeNode* traversal(vector<int>& nums, int left, int right) {
if (left > right) {
return NULL;
}
int mid = (left + right) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = traversal(nums, left, mid-1);
root->right = traversal(nums, mid+1, right);
return root;
}
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode* root = traversal(nums, 0, nums.size()-1);
return root;
}
};
Python:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
if not nums:
return None
mid = len(nums) // 2
root = TreeNode(nums[mid])
root.left = self.sortedArrayToBST(nums[:mid])
root.right = self.sortedArrayToBST(nums[mid+1:])
return root
538. Convert BST to Greater Tree
思路:其实想到了差不多的思路。关键是右中左的遍历顺序
题目链接:538. Convert BST to Greater Tree
文章讲解:把二叉搜索树转换为累加树
视频讲解:把二叉搜索树转换为累加树
我的代码:
Python:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def __init__(self):
self.pre = 0
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
def traversal(root):
if not root:
return
self.convertBST(root.right)
root.val += self.pre
self.pre = root.val
self.convertBST(root.left)
traversal(root)
return root
总结
赶进度啊啊啊啊啊,先不写啥了