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
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.将有序数组转换为二叉搜索树
# 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]:
return self.build(nums,0,len(nums)-1)
def build(self,nums,left,right):
if left>right:
return
mid=(left+right)//2
root=TreeNode(nums[mid])
root.left=self.build(nums,left,mid-1)
root.right=self.build(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 __init__(self):
self.pre=0 #记录前一个节点的值
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
self.traverse(root)
return root
def traverse(self,root): #中序遍历
if not root:
return None
self.traverse(root.right)
root.val+=self.pre
self.pre=root.val
self.traverse(root.left)