题目
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入: root = [1,2,2,3,4,4,3]
输出: true
题解
一棵树自己和自己比很麻烦,两棵树就好比较了,左节点和右节点比,右节点和左节点比
方式一:递归
public boolean isSymmetric(TreeNode root) {
return isSymmetric(root, root);
}
// 比较两颗树是否对称
public boolean isSymmetric(TreeNode p, TreeNode q) {
// 终止条件
if (p == null && q == null) {
return true;
}
if ((p == null || q == null) || p.val != q.val) {
return false;
}
// 比较左右子树
return isSymmetric(p.right, q.left) && isSymmetric(p.left, q.right);
}
方式二:迭代
public boolean isSymmetric(TreeNode root) {
return isSymmetric(root, root);
}
// 比较两颗树是否对称
public boolean isSymmetric(TreeNode p, TreeNode q) {
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(p);
deque.offer(q);
while (!deque.isEmpty()) {
TreeNode node1 = deque.poll();
TreeNode node2 = deque.poll();
if (node1 == null && node2 == null) {
continue;
}
if ((node1 == null || node2 == null) || node1.val != node2.val) {
return false;
}
deque.offer(node1.right);
deque.offer(node2.left);
deque.offer(node1.left);
deque.offer(node2.right);
}
return true;
}
总结
算法:递归
、迭代