携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
提示:
树中节点数目在范围 [1, 1000] 内 -100 <= Node.val <= 100
思路
1.这道题采用递归的方法去解决
2.首先判断一下根节点是否存在,如果根节点不存在,则表示这棵树是对称的,直接返回true
3.如果根节点存在,则需要判断左右子树是不是都是对称的,如果都是对称的,则说明这棵树都是对称 的,否则只要左右子树中,有一个不是对称的 ,则整个树就不是对称的树
4.这个时候怎么在声明一个方法check,来检验 左右子树是否都是对称的树,check传入两个参数,一个参数是左子树root.left,另外一个参数就是右子树root.right
5.在check方法中,获取到传过来的两个参数left和righ
6.首先判断当left和right都不存在的时候,说明左右子树都是对称的,则说明整个树也是对称的,则返回true
7.当判断left和right都存在的时候,我们只需要判断 左子树left的值和右子树right的值是否相等,并且递归检查左子树的left和右子树的rihgt是否一样和左子树的rihgt和右子树的left是否一样。
8.其他情况就是左右子树中有一个不是对称的,那么整个树就不是对称的,则直接返回false
代码
const isSymmetric = (root) => {
const check = (left, right) => {
if (left == null && right == null) { // 两个子树都为null,是对称的
return true;
}
if (left && right) { // 两个子树都存在,则需要:root值相同,且他们的子树也满足镜像
return left.val == right.val && check(left.left, right.right) && check(left.right, right.left);
}
return false; // 一个子树存在一个不存在,肯定不对称
};
if (root == null) { // 如果传入的root就是null,对称
return true;
}
return check(root.left, root.right); // 否则,判断它的左右子树是否满足对称
};