题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/
难度:中等

描述:
给你二叉搜索树的根节点 root,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

题解

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, val=0, left=None, right=None):
  4. # self.val = val
  5. # self.left = left
  6. # self.right = right
  7. class Solution:
  8. def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
  9. def recursion(root):
  10. if root is None:
  11. return None
  12. if root.val > high:
  13. return recursion(root.left)
  14. if root.val < low:
  15. return recursion(root.right)
  16. root.left = recursion(root.left)
  17. root.right = recursion(root.right)
  18. return root
  19. return recursion(root)