0x00 题目
给定二叉搜索树
的根结点 root
返回值位于范围 [low, high]
之间的
所有结点的值的 和
0x01 思路
二叉搜索树
的特点:
当前
节点值 大
于 左子树
的所有节点值
当前
节点值 小
于 右子树
的所有节点值
根据这个特点,进行范围判断即可
把所有符合条件的值相加,得到最终结果
0x02 解法
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
解法:
func rangeSumBST(_ root: TreeNode?, _ low: Int, _ high: Int) -> Int {
// 存储结果
var res = 0
func dfs(_ t: TreeNode?, _ l: Int, _ r: Int) {
guard let t = t else { return }
// 在指定范围内,加上它的值
if l <= t.val && t.val <= r {
res += t.val
}
// 大于左侧,还可以往左
if l < t.val { dfs(t.left, l, r) }
// 小于右侧,还可以往右
if t.val < r { dfs(t.right, l, r) }
}
// 遍历查找
dfs(root, low, high)
return res
}
小编辑器
在线编程~