题目
Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that all its elements lies in [L, R] (R >= L). You might need to change the root of the tree, so the result should return the new root of the trimmed binary search tree.
Example 1:
1 2 3 4 5 6 7 8 9 10 11 12 Input: 1 / \ 0 2 L = 1 R = 2 Output: 1 \ 2
Example 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Input: 3 / \ 0 4 \ 2 / 1 L = 1 R = 3 Output: 3 / 2 / 1
难度 Easy
方法 采用递归的方法。如果root
为空,则直接返回root
; 如果root
的值<L
,表示root
及其左子树所有节点都<L
,那么需要改变root
节点,从root.right
中重新寻找root
节点。同理,当root
的值>R
时,需要从root.left
中重新寻找root
节点。当L<=root.val<=R
时,则递归处理root
的左右子树。
python代码 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 27 28 29 30 31 32 33 34 35 36 class TreeNode (object ): def __init__ (self, x ): self.val = x self.left = None self.right = None class Solution (object ): def trimBST (self, root, L, R ): if root == None : return None if root.val < L: return self.trimBST(root.right, L, R) if root.val > R: return self.trimBST(root.left, L, R) root.left = self.trimBST(root.left, L, R) root.right = self.trimBST(root.right, L, R) return root root = TreeNode(1 ) root.left = TreeNode(0 ) root.right = TreeNode(2 ) assert Solution().trimBST(root, 3 , 4 ) == None root = TreeNode(3 ) root.left = TreeNode(0 ) root.right = TreeNode(4 ) root.left.right = TreeNode(2 ) root.left.right.left = TreeNode(1 ) root = Solution().trimBST(root, 1 , 3 ) assert root.val == 3 assert root.left.val == 2 assert root.right == None assert root.left.left.val == 1