Leetcode100-相同的树|刷题打卡

296 阅读1分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述

给你两棵二叉树的根节点pq,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1 :

image.png

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

示例 2 :

image.png

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

二、思路分析

  1. 如果两个二叉树都为空,则两个二叉树相同。
  2. 如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同。
  3. 如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,
  • 不相同,则两个二叉树一定不同,
  • 相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。

这是一个递归的过程,因此可以使用深度优先搜索(DFS),递归地判断两个二叉树是否相同。

三、AC 代码

class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not p and not q:
            return True
        elif not p or not q:
            return False
        elif p.val != q.val:
            return False
        else:
            return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

输出为:

image.png

四、总结

该题是一道利用深度优先搜索(DFS)实现代码的题。从这道题体会到,理论很简单,思路需打开。在解决二叉树问题的时候可以优先想到用深度优先搜索(DFS)的方式进行解答。