从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结
101. 对称二叉树
-
给你一个二叉树的根节点 root , 检查它是否轴对称。
-
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true -
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false -
提示:
树中节点数目在范围 [1, 1000] 内
-100 <= Node.val <= 100 -
进阶: 你可以运用递归和迭代两种方法解决这个问题吗?
-
递归
class Solution { public boolean isSymmetric(TreeNode root) { return check(root.left, root.right); } public boolean check(TreeNode left, TreeNode right) { if (left == null && right == null) return true; if (left == null || right == null) return false; if (left.val != right.val) return false; return check(left.left, right.right) && check(left.right, right.left); } }
-
迭代
public boolean isSymmetric3(TreeNode root) { Queue<TreeNode> deque = new LinkedList<>(); deque.offer(root.left); deque.offer(root.right); while (!deque.isEmpty()) { TreeNode leftNode = deque.poll(); TreeNode rightNode = deque.poll(); if (leftNode == null && rightNode == null) { continue; } // if (leftNode == null && rightNode != null) { // return false; // } // if (leftNode != null && rightNode == null) { // return false; // } // if (leftNode.val != rightNode.val) { // return false; // } // 以上三个判断条件合并 if (leftNode == null || rightNode == null || leftNode.val != rightNode.val) { return false; } // 这里顺序与使用Deque不同 deque.offer(leftNode.left); deque.offer(rightNode.right); deque.offer(leftNode.right); deque.offer(rightNode.left); } return true; }