会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员,或
购买
该题目所属题库
,可解锁完整内容。
解题思路
本题要求在二叉搜索树(BST)中,按闭区间 [low, high] 统计账户编号之和,并将结果乘以 100(因为存款=账户编号×100)。核心利用 BST 的有序性进行“剪枝”搜索(Range Sum in BST):
- 若当前结点值
v < low,则整棵左子树都小于区间下限,不可能贡献答案,只需进入右子树;
- 若
v > high,则整棵右子树都大于区间上限,不可能贡献答案,只需进入左子树;
- 若
low ≤ v ≤ high,则当前结点贡献 v,左右子树都可能有贡献,继续分别遍历。
算法可以用递归或显式栈的迭代实现。为避免栈溢出及只使用基础语法,这里给出显式栈迭代版本。最终把区间内编号和乘以 100 即为区间存款总额。
P4313.第2题-账户总存款金额
题目内容
银行的核心系统采用二叉搜索树存储客户存款账户信息,以便于快速查询和资金分析。这些账户信息按照账户编号 (accountNo.)
从小到大排序(左子树 accountNo.< 父节点 accountNo.< 右子树 accountNo.) ,每个账户的 accountNo. 唯一且固定,对应的定期存款金额为账户编号的 100 倍(例如 accountNo.=1002 对应存款 100200 元)。
请基于二叉搜索树实现一个高效的计算功能,能够通过输入客户存款账户编号、区间上下限,计算该区间内账户的总存款金额(注:该区间为闭区间).
输入格式
- 第 1 行:按层序展开的 BST 结点,使用
null 表示空位,用空格分隔(不要再写中括号和逗号)。
- 第 2 行:两个整数
low high,同一行空格分隔(等价于两行分别输入也行)。
样例
输入
1005 1002 1008 1000 1004 null 1010
1002 1008
输出
401900
说明
1002−1008 区间内的账户为 1002、1004、1005、1008 ,余额总和为 (1002+1004+1005+1008)x100=401900