题目描述

思路
- 不管是迭代还是递归,要注意
- node1的左子树和node2的右子树是否对称
- node1的右子树和node2的左子树是否对称
迭代法

- 注意node的添加顺序,是按照
- node1的左子树
- node2的右子树
- node1的右子树
- node2的左子树
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) {
return true;
}
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root.left);
queue.add(root.right);
while(!queue.isEmpty()) {
TreeNode tmp1 = queue.removeFirst();
TreeNode tmp2 = queue.removeFirst();
if(tmp1 == null && tmp2 == null) {
continue;
}
if(tmp1 == null || tmp2 == null) {
return false;
}
if(tmp1.val != tmp2.val) {
return false;
}
queue.addLast(tmp1.left);
queue.addLast(tmp2.right);
queue.addLast(tmp1.right);
queue.addLast(tmp2.left);
}
return true;
}
}
递归法
- 先考虑两个节点值相等吗?如果相等,那么继续往下一层比较:
- node1的左子树和node2的右子树是否对称
- node1的右子树和node2的左子树是否对称

class Solution {
public boolean isSymmetric(TreeNode root) {
return check(root.left, root.right);
}
public boolean check(TreeNode node1, TreeNode node2) {
if (node1 == null && node2 == null) {
return true;
}
if (node1 != null && node2 != null && node1.val == node2.val) {
return check(node1.left, node2.right) && check(node1.right, node2.left);
} else {
return false;
}
}
}