一、解题思路
递归三部曲:
- 递归结束条件:当遇到空节点,返回None
- 递归返回值、参数
- 单层递归逻辑:将每个root.val与low、high比较,比low小的节点用同样方法递归右子树;比high大大节点递归其左子树。
- 难点:不符合条件的节点(<low or > high)会将另一侧符合条件的节点树赋值给其上一个节点左或右子树
# 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
引用: