问题描述:
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.
分析:
考虑到二叉搜索树的特性,根的值肯定大于左结点的值,肯定大于右结点的值。可以利用递归的思想。
判断root的值是否在[L,R]范围内
- root.val小于L的值,则直接舍弃左子树,返回继续修剪以root.right为根结点的右子树;
- root.val大于R的值,则直接舍弃右子树,返回继续修剪以root.left为根结点的左子树;
- 在范围内,则继续修剪左子树和右子树,然后返回root.
代码:
/**
* 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 root;
if(root.val < L){
return trimBST(root.right,L,R);
}
else if(root.val > R){
return trimBST(root.left,L,R);
}
else{
root.left = trimBST(root.left,L,R);
root.right = trimBST(root.right,L,R);
return root;
}
}
}