/** * @param {TreeNode} root * @param {number} low * @param {number} high * @return {number} */var rangeSumBST = function (root, low, high) {  let sum = 0 // 缓存结点值之和  let queue = [root] // 使用队列进行BFS搜索,初始值为树的根节点
  // 当队列被清空,表示搜索结束  while (queue.length) {    // 缓存当前一层的节点数量    let queueLength = queue.length
    // 将当前一层的节点清空    while (--queueLength >= 0) {      // 从队列中取出当前层的一个节点      const node = queue.shift()
      // 如果节点为空,则跳过      if (!node) {        continue      }
      // 当前节点的值小于low,它左侧的值都小于low,因此只要查找右侧节点      if (node.val < low) {        queue.push(node.right)      }      // 当前节点的值大于high,它左侧的值都大于high,因此只要查找右侧节点      else if (node.val > high) {        queue.push(node.left)      } else {        // 如果当前节点的值在[low, high]之间,就将其与子树的值加到sum        sum += node.val        // 继续向其子树搜索        queue.push(node.left)        queue.push(node.right)      }    }  }
  return sum}
评论