数据结构-判断两个树是否相同问题

1.相同的树

判断两个树是否相同,这种类型题目要用到解决二叉树最经典的递归思想,将大问题变成小问题,比如可以从好判断的方向入手,一个是空指针,另一个也是,这肯定是相同的,一个空指针,一个不是,这两个指针肯定不相同,这边可以用else if来减少代码量。两个指针指向的数据不同,这两个指针肯定不同,然后别的情况可以判断左子树是否相同,右子树是否相同来判断,递归一步步解决这个问题。


bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
    if(!p&&!q)
    return true;
    else if(!p||!q)
    return false;
    if(p->val!=q->val)
    return false;
    return  isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}

2.进阶问题-对称二叉树

 

bool check(struct TreeNode* p,struct TreeNode* q)
{
    if(!p&&!q)
    return true;
    else if(!p||!q)
    return false;
    if(p->val!=q->val)
    return false;
    return check(p->left,q->right)&&check(p->right,q->left);

}
bool isSymmetric(struct TreeNode* root)
{
    if(!root)
    return true;
    struct TreeNode* p=root->left;
    struct TreeNode* q=root->right;
    return check(p,q);
}

这个题如果没有第一个题的基础,真的不是很好想出来,但是,在第一题的帮助下,我们一眼就能看出来将root->left和root->right看作上一题的p,q,比较p->left和p->right和反过来的情况,这个题就很简单了。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值