[LeetCode 100. 相同的树] |刷题打卡

186 阅读1分钟

一、题目描述:

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

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

 

示例 1:

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

输出:true

示例 2:

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

输出:false

引自:leetcode-cn.com/problems/sa…

题目链接:100. 相同的树

二、思路分析:

  1. 同时深度优先遍历 p 和 q, 一旦发现不同的值,就return false;

  2. 深度遍历过程中注意以下几点:

    1. p q 结点同时为空,返回 true;
    2. p q 中只有某一个结点为空,返回 false;
    3. p q 结点的值不相等,返回 true;
    4. 递归遍历 p q 结点的左子树、右子树是否相同。

三、AC 代码:


class Solution {
    func isSameTree(_ p: TreeNode?, _ q: TreeNode?) -> Bool {
    
        return dfsTree(p, q);
    }
    
    // 深度优先遍历
    func dfsTree(_ p: TreeNode?, _ q: TreeNode?) -> Bool {
        // p q 结点同时为空
        if (p == nil && q == nil) {
            return true;
        }
        // p q 中只有某一个结点为空
        if (p == nil || q == nil) {
            return false;
        }
        // p q 结点的值不相等
        if (p?.val != q?.val) {
            return false;
        }
        // 递归遍历 p q 结点的左子树、右子树是否相同
        let leftFlag = dfsTree(p?.left, q?.left);
        let rightFlag = dfsTree(p?.right, q?.right);
        return leftFlag && rightFlag;
    }
}

四、参考学习网址

本文正在参与「掘金 3 月闯关活动」, 点击查看 活动详情