(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) {
        
     }
}
上一篇下一篇

猜你喜欢

热点阅读