Same Tree(等价二叉树)

本文探讨了如何判断两棵二叉树是否等价的问题,提供了两种递归算法的实现方式,并对比分析了两种方法的区别及正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical and the nodes have the same value.(给定两二叉树,判断它们是否相同。当两课二叉树的结构和节点值相同时被认为是相同的)

1.个人分析
直观的解法就是将两二叉树的每个节点进行比较,当任一节点的结构或节点值不同时就返回false。从根节点开始遍历,然后依次对左右子树作相同处理,本质上这就是二叉树的前序遍历。

2.个人解法

bool isSameTree(TreeNode* p, TreeNode* q) 
{
    if(p == NULL && q == NULL)
        return true;

    if((p == NULL && q != NULL) || (p != NULL && q == NULL) || (p != NULL && q                                      !=NULL && p->val != q->val) )
        return false;

    isSameTree(p->left, q->left);
    isSameTree(p->right, q->right);

    return true;
}

结果显示,这种方法无法通过所有的测试用例,比如[10,5,15],[10,5,null,null,15]两棵二叉树,虽然节点数和节点值相同,但是两者的结构是完全不同的。

3.参考解法

 bool isSameTree(TreeNode* p, TreeNode* q)
 {
    if(!p && !q)
        return true;

    if(!p || !q || p->val != q->val)
        return false;

    return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);      
}

结果表示这种解法才能够返回正确的结果,差别仅在最后一条语句上面。

4.总结
自己的解法与参考解法的思路是一样,都是基于二叉树的前序遍历实现该算法,区别仅在于自己的解法只是应用了遍历一棵二叉树的方法,而这里是同时遍历两棵二叉树,应该同时判断每个节点的左右子节点是否相同,而不是分开判断左右子节点。

PS:

  • 题目的中文翻译是本人所作,如有偏差敬请指正。
  • 其中的“个人分析”和“个人解法”均是本人最初的想法和做法,不一定是对的,只是作为一个对照和记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值