解题思路:
- 对于二叉搜索树的任意节点,左子树的所有节点值都小于它的值,右子树的所有节点值都小于它的值。
- 使用递归进行DFS搜索,如果当前节点的值小于
low
,只要向右子树搜索。如果当前节点的值大于high
只要向左子树搜索。 - 如果当前节点的值在
[low, high]
之间,就将其与子树的值相加返回
/**
* @param {TreeNode} root
* @param {number} low
* @param {number} high
* @return {number}
*/
var rangeSumBST = function (root, low, high) {
// 如果当前节点为空,不存在值,返回0
if (!root) {
return 0
}
// 当前节点的值小于low,它左侧的值都小于low,因此只要查找右侧节点
if (root.val < low) {
return rangeSumBST(root.right, low, high)
}
// 当前节点的值大于high,它左侧的值都大于high,因此只要查找右侧节点
if (root.val > high) {
return rangeSumBST(root.left, low, high)
}
// 如果当前节点的值在[low, high]之间,就将其与子树的值相加返回
return (
root.val +
rangeSumBST(root.left, low, high) +
rangeSumBST(root.right, low, high)
)
}
网友评论