非递归中序遍历求解

从两个方向进行中序遍历 对比

    TreeNode stack1[]=new TreeNode[500];
    int top1=-1;
    TreeNode stack2[]=new TreeNode[500];
    int top2=-1;

    boolean isSymmetrical(TreeNode pRoot)
    {
        if(pRoot!=null)
        {
            TreeNode p=pRoot;//从正常中序的方向遍历(左 根 右)
            TreeNode m=pRoot;//从反向中序的方向遍历(右 根 左)
            while(top1!=-1 || p!=null)//我们以正常中序能遍历到的节点为准
            {
                while(p!=null)
                {
                    //正常中序往左走 入栈
                    //反向的往右走 入栈
                    stack1[++top1]=p;
                    stack2[++top2]=m;
                    p=p.left;
                    m=m.right;
                    if(p!=null && m==null) return false;
                }
                //走到头
                if(top1!=-1)//拿出比较,选取右/左孩子 继续
                {
                    p=stack1[top1--];
                    m=stack2[top2--];
                    if(p.val!=m.val) return false;
                    /** TODO:我们是以正常中序能遍历到的节点为准,没有考虑反向的,
                    *   如果这时m还没走到头,可以在这判断一下
                    *   但是我没写,本题可以ac
                    */
                    p=p.right;
                    m=m.left;
                    if(p!=null && m==null) return false;
                }
            }
        }

        return true;
    }