题目
给定一个二叉搜索树,同时给定最小边界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)
如有疑问或建议,欢迎评论区留言~