(1) 938. Range Sum of BST
2019-12-02 本文已影响0人
滑冰的夏虫
递归程序的必要条件:
1. 必须有收敛条件,并对所有的收敛条件进行处理,结束或者返回值
2.每一次递归都把当前的问题规模缩小了一点
3.采用Bottom-up写法时,要分类讨论清楚,当前结果与子集结果的逻辑关系
Top-down: 在从上往下的过程中判断并更新结果,需要在整个递归中维持一个全局变量。然后可以根据一些条件判断控制递归搜索走的方向。
private void dfs(TreeNode node, int L, int R, int[] result) {
if (node == null) {
return;
}
if (node.val >= L && node.val <= R) {
result[0] += node.val;
}
//children
if (node.val > L) {
dfs(node.left, L, R, result);
}
if (node.val < R) {
dfs(node.right, L, R, result);
}
}
Bottom-up:
public int rangeSumBST(TreeNode root, int L, int R) {
if (root == null) {
return 0;
}
//get children result
int left = rangeSumBST(root.left, L, R);
int right = rangeSumBST(root.right, L, R);
//logical calculation
int sum = 0;
if (root.val < L) {
sum = right;
} else if (root.val > R) {
}
}