import java.util.Stack;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    
    // 定义一个队列,用于存放节点
    LinkedList<Integer> queue = new LinkedList<>();
    
    // 系统定义的函数
    boolean isSymmetrical(TreeNode pRoot) {
        if (null == pRoot || (null == pRoot.left && null == pRoot.right)) {
            return true;
        }
        if ((null == pRoot.left && null != pRoot.right) || (null != pRoot.left && null == pRoot.right)) {
            return false;
        }
        if (pRoot.left.val != pRoot.right.val) {
            return false;
        }
        // 调用自定义的函数,得到中序遍历的队列
        process(pRoot);
        // 定义一个辅助栈
        Stack<Integer> stack = new Stack<>();
        // 定义一个整型变量,用于存放 queue 的长度
        int ql = queue.size();
        // 将队列的前半部分压入栈中
        for (int i = 0; i < (ql / 2); i++) {
            stack.push(queue.poll());
        }
        // 将根节点从队列的头部移除
        queue.poll();
        while (!stack.isEmpty() && !queue.isEmpty()) {
            if (queue.poll() != stack.pop()) {
                return false;
            }
        }
        return true;
    }
    
    // 中序遍历的递归实现
    public void process(TreeNode root) {
        if (null == root) {
            return;
        }
        process(root.left);
        queue.add(root.val);
        process(root.right);
    }
}