669. 修剪二叉搜索树
# 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:
right = self.trimBST(root.right, low, high)
return right #如果该节点小于low,删除该节点返回其右子树并给其父节点
if root.val > high:
left = self.trimBST(root.left, low, high)
return left #如果该节点大于high,删除该节点返回其左子树并给其父节点
root.left = self.trimBST(root.left, low, high)
root.right = self.trimBST(root.right, low, high)
return root
108.将有序数组转换为二叉搜索树
# 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]:
root = self.Traversal(nums, 0, len(nums) - 1)
return root
def Traversal(self, nums: List[int], left: int, right: int) -> TreeNode:
if left > right:
return None
mid = left + (right - left) // 2
root = TreeNode(nums[mid])
root.left = self.Traversal(nums, left, mid - 1)
root.right = self.Traversal(nums, mid + 1, right)
return root
538.把二叉搜索树转换为累加树
# 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 convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
self.pre = 0
self.Traversal(root)
return root
def Traversal(self, node):
if not node:
return
self.Traversal(node.right)
node.val += self.pre
self.pre = node.val
self.Traversal(node.left)
参考文档:代码随想录