对于二叉树,检查它是否是自身的镜像(即,围绕其中心对称)。
例如,此二叉树是对称的:
1
/ \
2 2
/ \ / \
3 4 4 3
这个不对称
1
/ \
2 2
\ \
3 3
BFS
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.*;
public class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null) return true;
if(root.left==null&&root.right==null) return true;
if(root.left==null||root.right==null) return false;
LinkedList<TreeNode> que1 = new LinkedList<TreeNode>();
LinkedList<TreeNode> que2 = new LinkedList<TreeNode>();
que1.add(root.left);
que2.add(root.right);
while(!que1.isEmpty()&&!que2.isEmpty()){
TreeNode t1 = que1.pop();
TreeNode t2 = que2.pop();
if(t1.val != t2.val)return false;
if((t1.left==null&&t2.right!=null) || (t1.left!=null&&t2.right==null)){
return false;
}
if((t1.right==null&&t2.left!=null) || (t1.right!=null&&t2.left==null)){
return false;
}
if(t1.left!=null&&t2.right!=null){
que1.push(t1.left);
que2.push(t2.right);
}
if(t1.right!=null&&t2.left!=null){
que1.push(t1.right);
que2.push(t2.left);
}
}
if(!que1.isEmpty()||!que2.isEmpty())return false;
return true;
}
}
dfs
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root) {
return dfs(root,root);
}
public boolean dfs(TreeNode root1,TreeNode root2){
if(root1==null && root2==null) return true;
if((root1!=null && root2==null) || (root1==null && root2!=null)) return false;
return ((root1.val==root2.val) && dfs(root1.left,root2.right) && dfs(root1.right,root2.left));
}
}