递归之美:如何判断两颗二叉树是否相同

递归之美:如何判断两颗二叉树是否相同_第1张图片
本篇博客会讲解力扣“100. 相同的树”的解题思路,这是题目链接。

先来审题:
递归之美:如何判断两颗二叉树是否相同_第2张图片
以下是输出示例:
递归之美:如何判断两颗二叉树是否相同_第3张图片
以下是提示:
递归之美:如何判断两颗二叉树是否相同_第4张图片
本题的思路是递归+分类讨论。

  1. 若2棵树都是空树,则相同。
  2. 若其中一棵树是空树,另一棵非空,则不相同。
  3. 若2棵树都非空,比较根结点,若根结点不同,则不相同。
  4. 若2棵树都非空,且根结点相同,则转换为左子树和右子树分别是否相同(大事化小)。
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
    // 2棵树都是空树,相同
    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);
}

总结

善于运用递归,分类讨论时要严谨,涵盖所有情况。

感谢大家的阅读!

你可能感兴趣的:(力扣刷题,算法,数据结构,c语言,二叉树,递归)