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