Leetcode 669 修剪二叉搜尋樹 Java&Python
阿新 • • 發佈:2018-11-22
給定一個二叉搜尋樹,同時給定最小邊界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
這道題目一定要注意二叉搜尋樹的性質,為什麼題目不是修剪二叉樹而是修剪二叉搜尋樹,依據二叉搜尋樹的性質,在移除節點的時候,不會出現待移除節點同時存在左右子樹的情況。
Java
public TreeNode trimBST(TreeNode root, int L, int R) { if (root == null) { return null; } if (root.val >= L && root.val <= R) { root.left = trimBST(root.left, L, R); root.right = trimBST(root.right, L, R); return root; } if(root.val < L) { return trimBST(root.right, L, R); } //root.val > R return trimBST(root.left, L, R); }
Python
class Solution: def trimBST(self, root, L, R): """ :type root: TreeNode :type L: int :type R: int :rtype: TreeNode """ if root is None : return None if root.val >= L and root.val <= R : root.left = self.trimBST(root.left, L, R) root.right = self.trimBST(root.right, L, R) return root if root.val < L : return self.trimBST(root.right, L, R) # root.val > R return self.trimBST(root.left, L, R)