Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
Recursive:
class Solution {
public:
bool isSameTree(TreeNode *p, TreeNode *q) {
if (p == NULL) {
return q == NULL;
}
if (q == NULL) {
return p == NULL;
}
return (p->val == q->val) && isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
};
Iteration:
class Solution {
public:
bool isSameTree(TreeNode *p, TreeNode *q) {
if (p == NULL) {
return q == NULL;
}
if (q == NULL) {
return p == NULL;
}
vector<TreeNode*> lQ(1,p);
vector<TreeNode*> rQ(1,q);
int lSize = 1;
int rSize = 1;
while(!lQ.empty() && !rQ.empty()) {
if (lSize != rSize) {
return false;
}
for (int i = 0; i < lSize; i++) {
if (lQ[i] == NULL && rQ[i] == NULL) {
continue;
}
if (lQ[i] == NULL || rQ[i]== NULL) {
return false;
}
if (rQ[i]->val != lQ[i]->val) {
return false;
}
lQ.push_back(lQ[i]->left);
lQ.push_back(lQ[i]->right);
rQ.push_back(rQ[i]->left);
rQ.push_back(rQ[i]->right);
}
lQ.erase(lQ.begin(), lQ.begin()+lSize);
lSize = lQ.size();
rQ.erase(rQ.begin(), rQ.begin()+rSize);
rSize = rQ.size();
}
return lQ.empty() && rQ.empty();
}
};