C语言每日一题(51)相同的树

力扣网100 相同的树

题目描述

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

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

示例 1:

C语言每日一题(51)相同的树_第1张图片

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

示例 2:

C语言每日一题(51)相同的树_第2张图片

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

示例 3:

C语言每日一题(51)相同的树_第3张图片

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

提示:

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

涉及知识点:二叉树、递归

思路分析

还是基于递归的思想,但我们需要考虑一些特殊情况,递归过程中,如果碰到两个结点为空的情况,说明此时已经递归到两棵树的叶子结点了,而中途没有进行返回,说明两颗树相同。

当两棵树有一个结点不相等的话,此时就要返回false了,除此之外,如果存在其中一个结点为空而另外一个结点不为空,也是要返回false的。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(q==NULL&&p==NULL)
    {
        return true;
    }
    if(q==NULL&&p||q&&p==NULL)
    {
        return false;
    }
    if(q->val!=p->val)
    {
        return false;
    }
    return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}

你可能感兴趣的:(c语言,算法,开发语言)