我的leetcode代码都已经上传到我的git添加链接描述
题干
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
想法
树的判断,多半可以递归。
镜像对称:以根节点为轴,对左右每个节点而言,他们对应的值相等且子树也是镜像堆成的。
于是使用左右双指针,都指向root,
左子树往左的时候右子树往右。
反之亦然。
Java代码
package daily;
public class IsSymmetric {
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public boolean isSymmetric(TreeNode root) {
return check(root,root);
}
//左右两个指针
public boolean check(TreeNode l,TreeNode r){
//全空
if(l==null&&r==null){
return true;
}
//一个空
if(l==null||r==null){
return false;
}
//左右对应值相等,且左右自动对称
return l.val==r.val&&check(l.left,r.right)&&check(l.right,r.left);
}
public static void main(String[] args){
IsSymmetric isSymmetric=new IsSymmetric();
TreeNode root=new TreeNode(1);
root.left=new TreeNode(2);
root.right=new TreeNode(2);
root.left.left=new TreeNode(3);
root.left.right=new TreeNode(4);
root.right.left=new TreeNode(4);
root.right.right= new TreeNode(3);
System.out.println(isSymmetric.isSymmetric(root));
}
}