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<Solution>
想法如下
- 利用 recursive 來解這題
- 如果 root.val < L,代表只有 root.right 有可能 > L,所以再用 recursive 檢查
- 同理,如果 root.val > R,代表只有 root.left 有可能 < R,再用 recursive 檢查
- 如果 L <= root.val <= R,那麼對於其左右子樹,再用 recursive 檢查
code 如下
Java(參考解法)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Definition for a binary tree node. | |
* public class TreeNode { | |
* int val; | |
* TreeNode left; | |
* TreeNode right; | |
* TreeNode(int x) { val = x; } | |
* } | |
*/ | |
class Solution { | |
public TreeNode trimBST(TreeNode root, int L, int R) { | |
if(root == null) { | |
return null; | |
} | |
if(root.val < L) { | |
return trimBST(root.right, L, R); | |
} | |
if(root.val > R) { | |
return trimBST(root.left, L, R); | |
} | |
root.left = trimBST(root.left, L, R); | |
root.right = trimBST(root.right, L, R); | |
return root; | |
} | |
} |
沒有留言:
張貼留言