专栏:50多种数据结构彻底征服

专栏:50多种经典图论算法全部掌握

25届秋招大厂正在陆续开奖,最近两天各网友也都晒出了自己的开奖薪资,今年的校招薪资和往年也有很大不同,下面截取了字节,美团,快手,百度,华为等大厂的开奖薪资,基本上普遍年薪都在40w以上。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第100题:相同的树。

问题描述

来源:LeetCode第100题

难度:简单

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例1:

打开网易新闻 查看精彩图片

输入:p = [1,2,3], q = [1,2,3] 输出:true

示例2:

打开网易新闻 查看精彩图片

输入:p = [1,2], q = [1,null,2] 输出:false

  • 两棵树上的节点数目都在范围 [0, 100] 内

  • -10^4 <= Node.val <= 10^4

问题分析

这题让判断两棵二叉树是否相等,可以从根节点开始比较,如果根节点的值不同,这两颗二叉树肯定不相等。如果根节点的值相同,还需要判断左子树和右子树是否也相等,左右子树的判断和根节点的判断一样,所以它实际上就是个递归。

JAVA:

public boolean isSameTree(TreeNode p, TreeNode q) {
    // 如果都为空我们就认为他是相同的
    if (p == null && q == null)
        return true;
    // 如果一个为空,一个不为空,很明显不可能是相同的树,直接返回false即可
    if (p == null || q == null)
        return false;
    // 如果这两个节点都不为空并且又不相等,所以他也不可能是相同的树,直接返回false
    if (p.val != q.val)
        return false;
    // 走到这一步说明节点p和q是完全相同的,我们只需要在比较他们的左右子节点即可
    return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}

C++:

public:
    bool isSameTree(TreeNode *p, TreeNode *q) {
        // 如果都为空我们就认为他是相同的
        if (p == nullptr && q == nullptr)
            return true;
        // 如果一个为空,一个不为空,很明显不可能是相同的树,直接返回false即可
        if (p == nullptr || q == nullptr)
            return false;
        // 如果这两个节点都不为空并且又不相等,所以他也不可能是相同的树,直接返回false
        if (p->val != q->val)
            return false;
        // 走到这一步说明节点p和q是完全相同的,我们只需要在比较他们的左右子节点即可
        return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
    }

Python:

def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
    # 如果都为空我们就认为它是相同的
    if not p and not q:
        return True
    # 如果一个为空,一个不为空,很明显不可能是相同的树,直接返回False即可
    if not p or not q:
        return False
    # 如果这两个节点都不为空并且又不相等,所以他也不可能是相同的树,直接返回False
    if p.val != q.val:
        return False
    # 走到这一步说明节点p和q是完全相同的,我们只需要再比较他们的左右子节点即可
    return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。