# 100-相同的树

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/same-tree

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

# 一、题目描述

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

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

示例 1:

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

输出:true

示例 2:

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

输出:false

示例 3:

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

输出:false

提示:

  • 两棵树上的节点数目都在范围 [0, 100] 内
  • -104 <= Node.val <= 104

# 二、解法

先判断同一位置是否为空的情况:

  • p、q 都为空 true。
  • p、q 一个为空,一个不为空 false。
  • 都不为空,判断当前的值,不相等 false。相等递归比较各自的左子树,左子树不相等,直接 false,左子树相等后,再比较右子树。
class Solution {
   public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if (p == nullptr && q == nullptr) {
            return true;
        } else if (p == nullptr && q != nullptr) {
            return false;
        } else if (p != nullptr && q == nullptr) {
            return false;
        }
        if (p->val != q->val) {
            return false;
        }
        bool res = isSameTree(p->left, q->left);
        if (res == false) {
            // 左子树不相等
            return false;
        }
        res = isSameTree(p->right, q->right);
        return res;
        // return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23