二叉树(检查两棵树是否相同)

题目(力扣)

判断二叉树是否相同,就需要分别看他们的左节点和右节点是否分别相同。

注意:左右节点不可弄反(如,p的左节点和q的右节点比较......)

首先,先判断他的特殊情况:

比如,当两颗数的root节点都为NULL时,就可以return true了。

if (p == NULL && q == NULL)
{
    return true;
}

接着,就可以看两棵树中是否一棵树中的选中节点为空,而另一棵树的选中节点却不为空时,就可以判断出其不是相同树了。

else if (p == NULL || q == NULL)
{
    return false;
}

然后,就可以去看正常情况了(也就是题目所述),判断节点中的数据是否相同,由于要判断完整个二叉树的数据,所以不能在前面就直接返回true,因此,使用其相反的去做判断。

else if (p->val != q->val)
{
    return false;
}

最后,就是利用递归遍历整棵树,依次做判断。

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

题目的提交:

完整代码:

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if (p == NULL && q == NULL)
    {
        return true;
    }
    else if (p == NULL || q == NULL)
    {
        return false;
    }
    else if (p->val != q->val)
    {
        return false;
    }
    else
    {
        return isSameTree(p->left, q->left)
            && isSameTree(p->right, q->right);
    }
}
  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
判断两棵二叉树是否结构相同,可以通过递归的方式进行判断。 首先,判断两棵树的根节点是否相同,如果不同则这两棵树的结构肯定不同;如果相同,则递归判断它们的左子树和右子树是否相同。 以下是C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> // 二叉树结点定义 typedef struct node { int val; struct node *left; struct node *right; } TreeNode; // 判断两棵二叉树是否结构相同 bool isSameTree(TreeNode* p, TreeNode* q) { if (p == NULL && q == NULL) { return true; } else if (p == NULL || q == NULL) { return false; } else if (p->val != q->val) { return false; } else { return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); } } // 主函数 int main() { // 构造两棵二叉树 TreeNode *p1 = (TreeNode *)malloc(sizeof(TreeNode)); TreeNode *p2 = (TreeNode *)malloc(sizeof(TreeNode)); TreeNode *q1 = (TreeNode *)malloc(sizeof(TreeNode)); TreeNode *q2 = (TreeNode *)malloc(sizeof(TreeNode)); TreeNode *q3 = (TreeNode *)malloc(sizeof(TreeNode)); p1->val = 1; p1->left = p2; p1->right = NULL; p2->val = 2; p2->left = NULL; p2->right = NULL; q1->val = 1; q1->left = q2; q1->right = q3; q2->val = 2; q2->left = NULL; q2->right = NULL; q3->val = 3; q3->left = NULL; q3->right = NULL; // 判断两棵二叉树是否结构相同 bool same = isSameTree(p1, q1); if (same) { printf("p1 and q1 have the same structure.\n"); } else { printf("p1 and q1 do not have the same structure.\n"); } // 释放内存 free(p1); free(p2); free(q1); free(q2); free(q3); return 0; } ``` 以上代码中,我们定义了一个 TreeNode 结构体表示二叉树的结点,其中包含了结点的值、左子树和右子树。isSameTree 函数用于判断两棵二叉树是否结构相同,如果相同则返回 true,否则返回 false。在主函数中,我们构造了两棵二叉树,然后调用 isSameTree 函数进行判断。最后,我们释放了动态分配的内存,避免内存泄漏。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值