1. 程式人生 > >【LeetCode】669. Trim a Binary Search Tree 解題報告(Python)

【LeetCode】669. Trim a Binary Search Tree 解題報告(Python)

作者: 負雪明燭
id: fuxuemingzhu
個人部落格: http://fuxuemingzhu.cn/


目錄

題目地址:https://leetcode.com/problems/trim-a-binary-search-tree/description/

題目描述

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 = 2

Output: 
    1
      \
       2

Example 2:

Input: 
    3
   / \
  0   4
   \
    2
   /
  1

  L = 1
  R = 3

Output: 
      3
     / 
   2   
  /
 1

題目大意

給定[L,R]區間,進行BST裁剪。只要數值不在該區間的節點,全部都刪除。返回的結果應該仍然是個BST.

解題方法

遞迴

想法很簡單了,如果root的值比R大,說明root以及其所有右節點都不在這個區間內,向左邊搜尋。如果root的值比L小,,說明root以及其所有左節點都不在這個區間內,向右邊搜尋。如果root正好在這個區間內,那麼分別對它的左右子樹進行裁剪就好了。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    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 > R: return self.trimBST(root.left, L, R) elif root.val < L: return self.trimBST(root.right, L, R) else: root.left = self.trimBST(root.left, L, R) root.right = self.trimBST(root.right, L, R) return root

日期

2018 年 11 月 8 日 —— 專案進展緩慢