整体这道题还是在考 树的前中后序遍历的递归实现和非递归实现
而镜像其实就 是 把根抛去 左右 变成 右左 即可 即 递归调用节点顺序,入栈节点顺序
其他就是比较了,用一个全局变量来存储是否为镜像

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return bool布尔型
     */
    public boolean isSymmetric (TreeNode root) {
        // write code here
        if(root==null){
            return true;
        }
        if(root.left==null&&root.right==null){
            return true;
        }
        process2(root.left,root.right);
        return isSym;

    }
    public boolean isSym=true;
    //非递归 两个栈 
    public void process2(TreeNode root,TreeNode root2){


        if(root!=null&&root2!=null){
            Stack<TreeNode> stack=new Stack<>();
            Stack<TreeNode> stack2=new Stack<>();
            stack.push(root);
            stack2.add(root2);
            //都不为空进行循环
            while(!stack.isEmpty()&&!stack2.isEmpty()){

                TreeNode node1=stack.pop();
                TreeNode node2=stack2.pop();
                if(node1==null&&node2==null){
                    continue;
                }else if(node1!=null&&node2!=null){
                    if(node1.val!=node2.val){
                        isSym=false;
                        break;
                    }
                //先左

                    stack.push(node1.left);
                    stack2.push(node2.right);

                //后右

                    stack.push(node1.right);
                    stack2.push(node2.left);
                }else{
                     isSym=false;
                     break;
                }





            }
            if(!stack.isEmpty()||!stack2.isEmpty()){
                isSym=false;
            }


       }else{
           isSym=false;
           return;
       }

    }


    //递归套路

    public void process(TreeNode root,TreeNode root2){
       if(root!=null&&root2!=null){
           if(root.val!=root2.val){
              isSym=false;
           }
           process(root.left,root2.right);
           process(root.right,root2.left);
       }else if(root==null&&root2==null){
           return;
       }else{
           isSym=false;
           return;
       }


    }
}