题目链接
实现思路
递归
- 首先判断 p 和 q 的情况(看他们是否为空)。
如果都为空,则返回 true。若只有一个为空,则两棵树不相同,返回 false。if (p == nullptr && q == nullptr) { // 都为空 return true; } // p != nullptr || q != nullptr if (p == nullptr || q == nullptr) { // 只有一个为空 return false; }
- 经过上面的判断之后,p 和 q 都不为空。此时判断 p->val 和 q->val 是否相等。
如果不相等,直接返回 false;否则,对两者的左子树和右子树都进行判断。if (p->val != q->val) { return false; } else { return judge(p->left, q->left) && judge(p->right, q->right); }
实现代码(C++)
class Solution {
public:
bool judge(TreeNode *p, TreeNode *q) {
if (p == nullptr && q == nullptr) {
return true;
} // p != nullptr || q != nullptr
if (p == nullptr || q == nullptr) {
return false;
}
if (p->val != q->val) {
return false;
} else {
return judge(p->left, q->left) && judge(p->right, q->right);
}
}
bool isSameTree(TreeNode* p, TreeNode* q) {
return judge(p, q);
}
};