请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
限制:
0 <= 节点个数 <= 1000
注意:本题与主站 101 题相同:https://leetcode-cn.com/problems/symmetric-tree/
Related Topics
递归比较
分析
- 左节点等于右节点
- 左节点的左子节点 == 右节点的右子节点
- 左节点的右子节点 == 右节点的左子节点
- 没有了
代码
class Solution {
public boolean isSymmetric(TreeNode root) {
//如果root==null 直接返回true,
//否则比较root的左右节点是否相等
return root==null || compare(root.left, root.right);
}
public boolean compare(TreeNode nodeL, TreeNode nodeR){
//如果要比较的两个节点都是null 符合要求,且不用再往下比较了,直接返回true
if (null == nodeL && null == nodeR){
return true;
}
//进入到了这里的时候,不可能两个都是null了,如果有一个是null,则不是镜像的,返回false
//如果两个节点都不是null,且两个的值不一样,也表名不是镜像的,返回false,不用再往下比较了
if (nodeL == null || nodeR == null || nodeL.val != nodeR.val ){
return false;
}
//继续对比两个节点的左右子节点是否对应相等
// 左节点的左子节点 == 右节点的右子节点
//且 左节点的右子节点 == 右节点的左子节点
return compare(nodeL.left, nodeR.right) && compare( nodeL.right, nodeR.left);
}
}
发表评论