LeetCode-669 修剪二叉树

题目链接:669. 修剪二叉搜索树 - 力扣(LeetCode)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def trimBST(self, root, low, high):
"""
:type root: TreeNode
:type low: int
:type high: int
:rtype: TreeNode
"""
s=Solution() #创建实例
if not root:
''' 检查根节点是否存在,如果不存在,则返回None(不是必需的,是用于处理某些特殊情况而添加的,例如在遍历一棵树的时候,你可能需要在递归到最后一个叶子节点后返回None,以便告诉调用方已经到达了书的底部,如果不进行这样的处理,在遍历到最后一个节点时,程序将抛出AttributeError错误)'''
return None
if root.val<low:#如果当前根节点的值小于最小值,则只需判断当前节点的右节点
return s.trimBST(root.right,low,high)
elif root.val>high: #如果当前根节点的值大于最大值,则只需判断当前节点的左节点
return s.trimBST(root.left,low,high)
else: #如果当前值位于最小值与最大值之间,则递归的处理左子树和右子树以返回修建后的树
root.left=s.trimBST(root.left,low,high)
root.right=s.trimBST(root.right,low,high)
return root