669. Trim a Binary Search Tree

来源:互联网 发布:苹果电脑mac开机密码 编辑:程序博客网 时间:2024/06/05 18:56

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

思路:
考虑到二叉搜索树的特性,根的值肯定大于左结点的值,肯定大于右结点的值。可以利用递归的思想。
判断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;        }    }}
原创粉丝点击