class
Solution {
public
:
bool
isSymmetric(
struct
Node* root)
{
Node *curr1 = root, *curr2 = root;
while
(curr1 != NULL && curr2 != NULL) {
if
(curr1->left == NULL
&& curr2->right == NULL) {
if
(curr1->data != curr2->data)
return
false
;
curr1 = curr1->right;
curr2 = curr2->left;
}
else
if
(curr1->left != NULL
&& curr2->right != NULL) {
Node* pre1 = curr1->left;
Node* pre2 = curr2->right;
while
(pre1->right != NULL
&& pre1->right != curr1
&& pre2->left != NULL
&& pre2->left != curr2) {
pre1 = pre1->right;
pre2 = pre2->left;
}
if
(pre1->right == NULL
&& pre2->left == NULL) {
pre1->right = curr1;
pre2->left = curr2;
curr1 = curr1->left;
curr2 = curr2->right;
}
else
if
(pre1->right == curr1
&& pre2->left == curr2) {
pre1->right = NULL;
pre2->left = NULL;
if
(curr1->data != curr2->data)
return
false
;
curr1 = curr1->right;
curr2 = curr2->left;
}
else
return
false
;
}
else
return
false
;
}
if
(curr1 != curr2)
return
false
;
return
true
;
}
};