给定一个二叉树,检查它是否是自身的镜像(即,围绕其中心对称)。例如,这个二叉树[1,2,2,3,4,3,3]是对称的:但是以下[ 1,2,2,null,3,null,3]不是:
package com.example.tree;
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
package com.example.tree;
/**
* Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
* For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
* But the following [1,2,2,null,3,null,3] is not:
*/
public class SolutionToMirrorOfItself {
public static boolean isSymmetric(TreeNode root) {
return check(root,root,"root");
}
private static boolean check(TreeNode r1, TreeNode r2 ,String flag){
System.out.println("flag = " + flag);
if(r1 == null && r2 == null)
return true;
if(r1 == null || r2 == null)
return false;
if(r1.val == r2.val){
Boolean flags = check(r1.left,r2.right,"L")&&check(r1.right,r2.left,"R");
return flags;
}else{
return false;
}
}
//[1,2,2,3,4,4,3]
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
TreeNode t1 = new TreeNode(2);
TreeNode t2 = new TreeNode(2);
TreeNode t3 = new TreeNode(3);
TreeNode t4 = new TreeNode(4);
TreeNode t5 = new TreeNode(4);
TreeNode t6 = new TreeNode(3);
TreeNode t7 = new TreeNode(5);
TreeNode t8 = new TreeNode(6);
TreeNode t9 = new TreeNode(7);
TreeNode t10 = new TreeNode(8);
TreeNode t11 = new TreeNode(8);
TreeNode t12 = new TreeNode(7);
TreeNode t13 = new TreeNode(6);
TreeNode t14 = new TreeNode(5);
root.left = t1;
root.right = t2;
t1.left = t3;
t1.right = t4;
t2.left = t5;
t2.right = t6;
t3.left = t7;
t3.right = t8;
t4.left = t9;
t4.right = t10;
t5.left = t11;
t5.right = t12;
t6.left = t13;
t6.right = t14;
System.out.println(isSymmetric(root));
}
}
备注:博主微信公众号,不定期更新文章,欢迎扫码关注。