【数据结构与算法】判断两棵二叉树是否相同

举报
倔强的石头_ 发表于 2025/09/05 22:30:04 2025/09/05
【摘要】 给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 解题思路:通过递归调用,对两棵树的每一个节点进行判断

目录

一、问题描述

二、解题思路

三、C语言实现代码 



一、问题描述

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

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

ee7834d0cd9c4f289b089bb3bf0aa72e.jpeg


二、解题思路

解题思路:
通过递归调用,对两棵树的每一个节点进行判断


  • 首先,如果两棵树的根结点都为NULL,说明这两棵树是相同的,都是空树,返回true
  • 如果一棵树根结点为空,另一棵树根结点不为空,说明两棵树结构是不同的
  • 如果上述条件没有执行,再来判断节点的值:但这里要注意,判断两棵树节点的值相同返回true不可行,因为即使根结点值相同,还需要对子树继续进行判断;所以这里改成判断两棵根结点的值不相同就返回false
  • 如果上述条件都没有执行,说明根结点既不为空,结构和值也相同,对子树继续判断——分别将两棵树的左右指针指向的节点作为参数进行递归调用,如果两个函数都返回true,则返回true(如果两棵树相同,函数会一直调用,直到左右指针都指向NULL,会逐步返回true回归;否则任何一步出现false,都会往回逐步返回false)



三、C语言实现代码 

struct TreeNode {
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
    
};
typedef struct TreeNode TNode;
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
    if (p == NULL && q == NULL)//是否都为空
        return true;
    if (p == NULL || q == NULL)//判断当前节点的结构是否相同
        return false;
    if (p->val != q->val)//判断当前节点的值是否相同
        return false;
    return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);

}

a5921a6934dd4d748be732885425caa1.jpeg


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。