一、题
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
二、示例
2.1> 示例 1:
【输入】root = [1,2,2,3,4,4,3] 【输出】true
2.2> 示例 2:
【输入】root = [1,2,2,null,3,null,3] 【输出】false
限制:
- •
0
<= 节点个数 <=1000
三、解题思路
根据题目描述,我们需要确定某个二叉树是否是对称二叉树
。那么以第二层Node节点为例,符合对称二叉树的条件就是Node.left.left
等于Node.right.right
,并且Node.left.right
等于Node.right.left
,并且通过递归的方式,对每层的节点都进行对比操作。
为了便于描述,我们以【输入】root = [4,2,2,6,9,9,6,1,7,8,6,6,8,7,1]
为例,演示一下验证逻辑:
【步骤1】
root
.left是否等于root
.right 【步骤2】 [root.left
].left是否等于[root.rigjt
].right [root.left
].right是否等于[root.rigjt
].left 【步骤3】 [root.left.left
].left是否等于[root.right.right
].right [root.left.left
].right是否等于[root.right.right
].left [root.left.right
].left是否等于[root.right.left
].right [root.left.right
].right是否等于[root.right.left
].left
四、代码实现
代码语言:javascript复制class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return compare(root.left, root.right);
}
public boolean compare(TreeNode node1, TreeNode node2) {
if (node1 == null && node2 == null) return true;
if (node1 == null || node2 == null || node1.val != node2.val) return false;
return compare(node1.left, node2.right) && compare(node1.right, node2.left);
}
}