/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param p TreeNode类 
     * @param q TreeNode类 
     * @return bool布尔型
     */
    bool isSameTree(TreeNode* p, TreeNode* q) {
        // write code here
        if(p == nullptr && q == nullptr)
        {
            return true;
        }
        if(p == nullptr || q == nullptr)
        {
            return false;
        }
        return (p->val == q->val) && isSameTree(p->left,q->left) && isSameTree(p->right, q->right);
    }
};

代码关键解释

  1. 边界条件处理:p == nullptr && q == nullptr:两个树的当前位置都没有节点,说明这部分结构一致,返回 true(递归的终止条件);p == nullptr || q == nullptr:只有一个节点为空,说明结构不一致,直接返回 false。
  2. 核心逻辑:先判断当前节点的值是否相等(p->val == q->val);再递归判断左子树是否相等(isSameTree(p->left, q->left));最后递归判断右子树是否相等(isSameTree(p->right, q->right));三者必须同时满足(&& 连接),才说明两个二叉树相等。