938. 二叉搜索树的范围和
- 2019 年 10 月 7 日
- 筆記
题目
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。
二叉搜索树保证具有唯一的值。
示例 1:
输入:root = [10,5,15,3,7,null,18], L = 7, R = 15 输出:32 示例 2: 输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10 输出:23
提示:
树中的结点数量最多为 10000 个。最终的答案保证小于 2^31。
题解
二叉搜索树的特点是左子节点小于父节点,右子节点大于父节点。对于该题,则是求出L <= X <= R之间的节点的和

在处理树的问题,常使用递归 对于递归则需要,1. 需要推导递归公式, 2. 终止条件 对于该题,递归的终止条件则为 当前节点为空,则返回0,终止递归 递归公式:当前节点x<L, 则对右子树的和 当前节点x>R, 则对左子树的和 当前节点满足L<=x <= R, 则返回当前节点值 + 左子树之和 + 右子树之和 得到了以上的总结,就可以很容易的写出实现的代码
代码
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func rangeSumBST(root *TreeNode, L int, R int) int { if root == nil { return 0 } if root.Val < L { return rangeSumBST(root.Right, L, R) } if root.Val > R { return rangeSumBST(root.Left, L, R) } return root.Val + rangeSumBST(root.Left, L, R) + rangeSumBST(root.Right, L, R) }
运行结果

总结
递归在计算机算法中,比较难懂的一块。它的处理思想就是将一个问题,分解为一个子问题,该问题具有相同的处理代码,直到终止条件。递归底层使用了栈的数据结构