一、题目
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
二、示例
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
四、代码实现
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);
}
}
今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」