LeetCode-二叉搜索树的范围和

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuzhixiong_521/article/details/85014372

题目链接

Problem.938:https://leetcode.com/problems/range-sum-of-bst/

题目描述

给定一个二叉搜索树的根节点,以及两个整数类型的左边界和右边界,计算二叉搜索树中介于左边界和右边界的整数和(包含左边界和右边界)。注:假设二叉搜索树中的节点值唯一。

示例

输入1:

root = [10,5,15,3,7,null,18], L = 7, R = 15

输出1:

32

输入2:

root = root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10

输出2:

23

解析

首先定义一个全局变量sum用于记录求和结果。
既然是二叉搜索树,必然要分类讨论,只不过这个题目不是分两步讨论,而是分五步讨论。讨论如下:

  • 首先对根节点判空。
  • 若根节点值小于左边界L,则递归遍历根节点的右子树,L和R不变。
  • 若根节点值等于左边界L,则sum加上L,递归遍历右子树,左边界L变为L+1,右边界R不变。
  • 若根节点值大于左边界L且小于右边界R,则首先sum加上根节点值root.val,然后分两步递归,一为遍历左子树,L不变,R为root.val-1,二为遍历右子树,L变为root.val+1,R不变。
  • 若根节点值等于右边界R,则sum加上R,然后递归遍历左子树,L不变,R变为root.val-1。
  • 若根节点值大于右边界R,则递归遍历根节点的左子树,L和R不变。

代码

int sum = 0;
public int rangeSumBST(TreeNode root, int L, int R) {
    if(root != null){
        int val = root.val;
        if(val < L){
            rangeSumBST(root.right, L, R);
        } else if(val == L){
            sum += L;
            rangeSumBST(root.right, L+1, R);
        } else if(L < val && val < R){
            sum += val;
            rangeSumBST(root.left, L, val-1);
            rangeSumBST(root.right, val+1, R);
        } else if(val == R){
            sum += R;
            rangeSumBST(root.left, L, R-1);
        } else if(val > R){
            rangeSumBST(root.left, L, R);
        }
    }
    return sum;
}

猜你喜欢

转载自blog.csdn.net/liuzhixiong_521/article/details/85014372
今日推荐