服了,刷题也能上瘾?二

210 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

刷题上瘾计划

导读

曾经实施过的计划(在我博客都能搜到):

在这里插入图片描述

自从开始记录自己的刷题笔记开始我从每日肥学系列,到动态规划二十一天,再到大厂特训二十八天,还有不攻下dfs不比赛系列。有兴趣大家可以去看看。从最后的结果来看我收到了一些志同道合的朋友一起刷题。如果你也想要加入我们可以直接私信我加入我们也可以下面留言打卡,现在我们的队伍还不是很大但是也有几位成功的同学了,有的进入了不错的公司(当然不能说全靠刷题得来的)有的拿到了比赛证书。接下来我会继续坚持下去,这个“瘾”我们要培养起来。所以我们再来一个为期二十八天刷题上瘾训练计划。等这二十八天过完我们在来一起总结一下。

PS:算法不太分语言大家都可以来的。

题目

给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。

示例 1:

在这里插入图片描述

输入:root = [10,5,15,3,7,null,18], low = 7, high = 15
输出:32

示例 2: 在这里插入图片描述

输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10
输出:23

测试地址:地址

解一: 直接深度搜索在low和high中的加起来

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int sumVal=0;
    public int rangeSumBST(TreeNode root, int low, int high) {
        if(root==null)return sumVal;
        if(root.val>=low&&root.val<=high){
            sumVal+=root.val;
        }
        rangeSumBST(root.left,low,high);
        rangeSumBST(root.right,low,high);
        return sumVal;
    }
}

解二:解一的思路比较暴力,其实作为一棵bst树完全可以根据它的特点来进行遍历。因为它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。所以得到

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int sumVal=0;
    public int rangeSumBST(TreeNode root, int low, int high) {
       if(root==null)return sumVal;
       if(root.val<low)return rangeSumBST(root.right,low,high);
       else if(root.val>high)return rangeSumBST(root.left,low,high);
       else{
           sumVal+=root.val;
           rangeSumBST(root.left,low,high);
           rangeSumBST(root.right,low,high);
       } 
       
       return sumVal;
    }
}

重要的事情

如果你在学习python或者Java哪怕是C遇到问题都可以来给我留言,因为在学习初期新手总会走很多弯路,这个时候如果没有有个人来帮一把的话很容易就放弃了。身边很多这样的例子许多人学着学着就转了专业换了方向,不仅是自身问题还是没有正确的学习。所以作为一个过来人我希望有问题给我留言,说不上是帮助就是顺手敲几行字的事情。