/*
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;

    }
   

};