美文网首页
【每日一刷LettCode Day10】 #669 修剪二叉搜索

【每日一刷LettCode Day10】 #669 修剪二叉搜索

作者: QuoVadis_k | 来源:发表于2019-04-10 21:43 被阅读0次

题目描述

给定一个二叉搜索树,同时给定最小边界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

Solution

递归

public class TreeNode {

    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

public static TreeNode trimBST(TreeNode root, int L, int R) {

        if (root == null){
            return null;
        }

        if (root.val > R) {
            return trimBST(root.left,L,R);
        }

        if (root.val < L){
            return trimBST(root.right,L,R);
        }

        root.right = trimBST(root.right,L,R);
        root.left = trimBST(root.left,L,R);

        return root;
    }

解题思路:

从根节点开始判断大小,比L小或者比R大的值就剪去

比R大,返回左节点递归后的节点;比L小,返回右节点递归后的值

在L,R之间的话,递归的判断左右节点的值


LettCode-修剪二叉搜索树

GitHub

微信公众号:一只爱生活的程序猿

相关文章

网友评论

      本文标题:【每日一刷LettCode Day10】 #669 修剪二叉搜索

      本文链接:https://www.haomeiwen.com/subject/rcraiqtx.html