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