669. 修剪二叉搜索树
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
if root.val > high:
left = self.trimBST(root.left, low, high)
return left
# 替换节点
root.left = self.trimBST(root.left, low, high)
root.right = self.trimBST(root.right, low, high)
return root
108.将有序数组转换为二叉搜索树
找到中间大小的数 作为根节点数值 递归遍历 左半部分数 和右半部分数
class Solution:
def Traversal(self, nums:List[int], left: int, right: int):
if left > right: return None
mid = (left + right)//2
root = TreeNode(nums[mid])
root.left = self.Traversal(nums, left, mid - 1)
root.right = self.Traversal(nums, mid + 1, right)
return root
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
return self.Traversal(nums, 0, len(nums) - 1)
538.把二叉搜索树转换为累加树
class Solution:
def __init__(self):
self.pre = 0
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
def Traversal(root: Optional[TreeNode]):
if not root: return
# 右中左
Traversal(root.right)
root.val += self.pre
self.pre = root.val
Traversal(root.left)
Traversal(root)
return root
遍历顺序 右 中 左
把前一个结点的val累加到root.val