题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
根据题意,其实就是对比左右子树。
先判断根节点的 left 是否与 right 相等,如果是则继续递归判断,判断的对象分别是left.left 和 right.right、left.right 和 right.left。
这样依次递归判断即可,思路应该很是很清晰的,中间遇到不符合的直接返回即可。
我们来看一下代码:
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isSymmetric(root.left, root.right);
}
private boolean isSymmetric(TreeNode left, TreeNode right) {
if ((left == null && right != null) || (left != null && right == null)) {
return false;
}
if (left == null && right == null) {
return true;
}
if (left.val != right.val) {
return false;
}
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
}
这是最粗显和直接的判断,所以 isSymmetric 代码还能优化一下:
class Solution {
private boolean isSymmetric(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
}
if (left == null || right == null || left.val != right.val) {
return false;
}
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
}
时间复杂度 O(N),空间复杂度 O(N)
好了,一道简单题!
https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/