?669. 修剪二叉搜索树(Python)

题目

给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

示例

示例 1

输入:

    1
   / \
  0   2

L = 1
R = 2

输出:

    1
      \
       2

示例 2

输入:

    3
   / \
  0   4
   \
    2
   /
  1

L = 1
R = 3

输出:

      3
     / 
   2   
  /
 1

解答

【参考官方答案】当node.val > R,那么修剪后的二叉树必定出现在节点的左边。类似地,当node.val < L,那么修剪后的二叉树出现在节点的右边。否则,我们将会修剪树的两边。

class Solution(object):
    def trimBST(self, root, L, R):
        def trim(node):
            if not node:
                return None
            elif node.val > R:
                return trim(node.left)
            elif node.val < L:
                return trim(node.right)
            else:
                node.left = trim(node.left)
                node.right = trim(node.right)
                return node
        return trim(root)

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(?669. 修剪二叉搜索树(Python))