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