LeetCode

来源:互联网 发布:电影制作知乎 编辑:程序博客网 时间:2024/05/30 04:58

Q:
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:

Input:     1   / \  0   2  L = 1  R = 2Output:     1      \       2

Example 2:

Input:     3   / \  0   4   \    2   /  1  L = 1  R = 3Output:       3     /    2     / 1

A:

# Definition for a binary tree node.class TreeNode(object):    def __init__(self, x):        self.val = x        self.left = None        self.right = Noneclass Solution(object):    def trimBST(self, root, L, R):        """        :type root: TreeNode        :type L: int        :type R: int        :rtype: TreeNode        """             if not root:            return None        if root.val < L:            return self.trimBST(root.right, L, R)        elif 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

二叉搜索树,即二叉排序树,特点是 左子树所有节点的值均小于根节点的值,右子树所有节点的值均大于根节点的值。
此处,首先判断是否存在节点,若不存在直接返回None。然后当root.val小于L时,则左子树所有节点值均小于L,因此,舍弃左子树,递归遍历root的右子树;当root.val大于R时,则右子树所有节点值均大于R,因此,舍弃右子树,递归遍历root的左子树。
之后便是正常的左右子树递归遍历,返回root。

原创粉丝点击