应用题-二叉树专题-修剪二叉搜索树(非常值得寻味的题)
```python
# 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]:
# 修剪二叉搜索树
# 若xhigh 则x的右子树均>high 将x的left 挂到 parent的right
if not root: return None
# !important:节点是如何移除的
if root.val < low:
# val < low 符合的区间在右子树
return self.trimBST( root.right, low, high )
if root.val > high:
# 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
```