/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
#include <cstddef>
#include <stack>
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot) {
//同时遍历左右两颗二叉树(如果左右两颗二叉树都不为空树),判断其是否相等
if(pRoot==nullptr)
return true;
TreeNode* bt2;
TreeNode* bt1;
stack<TreeNode*> s1;
stack<TreeNode*> s2;
bt2=pRoot->right;
bt1=pRoot->left;
//先排除有子树为空树的情况
if(bt1==nullptr&&bt2!=nullptr)
return false;
if(bt2==nullptr&&bt1!=nullptr)
return false;
//遍历左子树,顺便对称遍历右子树
while(!s1.emptysunbit1!=nullptr)
{
while(bt1!=nullptr)
{
//判断遍历到的结点是否相等
if(bt2==nullptr||bt1->val!=bt2->val)
return false;
s1.push(bt1);
s2.push(bt2);
bt1=bt1->left;
bt2=bt2->right;
}
//注意,循环出来的那一次也要判断是否相等
if(bt2!=nullptr)
return false;
if(!s1.empty())
{
bt1=s1.top();
bt2=s2.top();
s1.pop();
s2.pop();
bt1=bt1->right;
bt2=bt2->left;
}
}
return true;
}
};