给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
递归实现:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null){
return true;
}
return isSymmetric(root.left,root.right);
}
public boolean isSymmetric(TreeNode left,TreeNode right) {
if(left == null && right == null){
return true;
}
if(left == null || right == null || left.val != right.val){
return false;
}
return isSymmetric(left.left,right.right) && isSymmetric(left.right,right.left);
}
}
迭代实现:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null){
return true;
}
java.util.Stack<TreeNode> left = new java.util.Stack<>();
java.util.Stack<TreeNode> right = new java.util.Stack<>();
left.push(root.left);
right.push(root.right);
while(!left.isEmpty() && !right.isEmpty()){
TreeNode node1 = left.pop();
TreeNode node2 = right.pop();
if(node1 == null || node2 == null){
if(node1 != null){
return false;
}
if(node2 != null){
return false;
}
}else{
if(node1.val != node2.val){
return false;
}
left.push(node1.left);
left.push(node1.right);
right.push(node2.right);
right.push(node2.left);
}
}
if(left.isEmpty() && right.isEmpty()){
return true;
}
return false;
}
}