链接
题目描述
递归解法
注意递归调用时函数的参数为node1.left,node2.right
和node1.right,node2.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) {
return isSymmetric(root,root);
}
public boolean isSymmetric(TreeNode node1,TreeNode node2){
if(node1 == null && node2 == null){return true;}
if(node1 == null || node2 == null){return false;}
return (node1.val == node2.val)
&& isSymmetric(node1.left,node2.right) && isSymmetric(node1.right,node2.left);
}
}
迭代
class Solution {
public boolean isSymmetric(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
queue.offer(root);
while(!queue.isEmpty()){
TreeNode n1 = queue.poll();
TreeNode n2 = queue.poll();
if(n1 == null && n2 == null)continue;
if(n1 == null || n2 == null)return false;
if(n1.val != n2.val){return false;}
queue.offer(n1.left);
queue.offer(n2.right);
queue.offer(n1.right);
queue.offer(n2.left);
}
return true;
}
}