leetcode 669 修剪二叉搜索树
关于递归中的返回值掌握还不到位
class Solution:
def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
if not root:
return root
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
leetcode 108 将有序数组转换为二叉搜索树
关键是确定分割点
递归法:
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
if not nums:
return
mid = len(nums) // 2
root = TreeNode(nums[mid])
root.left = self.sortedArrayToBST(nums[:mid])
root.right = self.sortedArrayToBST(nums[mid + 1:])
return root
leetcode 538 将二叉搜索树转换为累加树
反向中序法:
class Solution:
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
self.pre = 0
if not root:
return root
self.traversal(root)
return root
def traversal(self, cur):
if not cur:
return
self.traversal(cur.right)
cur.val += self.pre
self.pre = cur.val
self.traversal(cur.left)
总结:
① 对于递归中的终止条件的理解不到位
② 对于返回值的掌握不到位
由于赶进度对于深层次的理解还不够透彻,所以之后需要再夯实一下二叉树的基础