leetcode 669. Trim a Binary Search Tree修剪二叉搜索树

来源:互联网 发布:linux 看目录本身权限 编辑:程序博客网 时间:2024/06/07 23:03

问题描述:

  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]范围内

  1. root.val小于L的值,则直接舍弃左子树,返回继续修剪以root.right为根结点的右子树;
  2. root.val大于R的值,则直接舍弃右子树,返回继续修剪以root.left为根结点的左子树;
  3. 在范围内,则继续修剪左子树和右子树,然后返回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;        }    }}
原创粉丝点击