题目:101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
难度:简单
例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
1 2 3 4 5
| 1 / \ 2 2 / \ / \ 3 4 4 3
|
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/symmetric-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
- 递归
- 迭代
解题代码
递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
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){ return false; } return left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left); } }
|
官方解题代码
迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class Solution { public boolean isSymmetric(TreeNode root) { return check(root, root); }
public boolean check(TreeNode u, TreeNode v) { Queue<TreeNode> q = new LinkedList<TreeNode>(); q.offer(u); q.offer(v); while (!q.isEmpty()) { u = q.poll(); v = q.poll(); if (u == null && v == null) { continue; } if ((u == null || v == null) || (u.val != v.val)) { return false; }
q.offer(u.left); q.offer(v.right);
q.offer(u.right); q.offer(v.left); } return true; } }
|