服了,刷题也能上瘾?(一)

251 阅读3分钟

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

刷题上瘾计划

导读

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

在这里插入图片描述

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

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

题目

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false。

示例 1:

在这里插入图片描述

输入:[1,1,1,1,1,null,1]
输出:true

示例 2:

在这里插入图片描述

输入:[2,2,2,5,2]
输出:false

测试链接:

题解

开始我们先来个小试牛刀,这个在dfs算是最简单的了,如果你有什么不明白可以看看我往期的文章,这道题我们就之间深度搜索然后比对值就行。 解一:

/**
 * 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 {
    public boolean dfs(TreeNode root,int value){
        if(root==null)return true;
        if(root.val!=value)return false;
        return dfs(root.left,value)&&dfs(root.right,value);
    }
    public boolean isUnivalTree(TreeNode root) {
        return dfs(root,root.val);

    }
}

解二:

一颗树是单值的,当且仅当根节点的子节点所在的子树也是单值的,同时根节点的值与子节点的值相同。

我们可以使用递归实现这个判断的过程。left_correct 表示当前节点的左孩子是正确的,也就是说:左孩子所在的子树是单值的,并且当前节点的值等于左孩子的值。right_correct 对当前节点的右孩子表示同样的事情。递归处理之后,当根节点的这两种属性都为真的时候,我们就可以判定这颗二叉树是单值的。

class Solution {
    public boolean isUnivalTree(TreeNode root) {
        boolean left_correct = (root.left == null ||
                (root.val == root.left.val && isUnivalTree(root.left)));
        boolean right_correct = (root.right == null ||
                (root.val == root.right.val && isUnivalTree(root.right)));
        return left_correct && right_correct;
    }
}

重要的事情

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