题目
思路
二叉树的问题可以考虑递归求解。
递归问题的两个必要条件
①每次转换为规模更小的问题求解-----本题判断当前两颗树是否相同可以转换为判断两个数的左子树和右子树是否都相同。
②递归需要有的终止条件----本题的终止递归条件就是当两棵树当前根节点的值不一样时返回false;当一棵树是空树另一棵树不是空树时返回false;当两棵树都是空树时,返回true。
代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
//2棵空树相同
if (p == NULL && q == NULL)
return true;
//一棵树为空,另一棵树不为空不相同
if (q != NULL && p == NULL || q == NULL && p != NULL)
return false;
//判断当前两棵树的根是否相同
if (p->val != q->val)
return false;
//两个数左右子树都相同
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}