题目:
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
递归思想:
递归思想的核心可以分为:分,解,合;
分:把题目拆分成更小且可以用同一种方法处理的小题目;
解:把解决小题目的方法写成函数,此函数就是递归函数,要注意递归函数的截止条件是什么;
合:把递归函数递归的结果结合到一起,得到最终整到题目的结果;
解题思路:
// 分:获取俩个树的左子树1和右子树2
// 解:判断树1的左子树和树2的右子树是否是镜像的,树1的右子树和树2的左子树是否是镜像的
// 合:如果上述成立 且 根节点相同 则为相同二叉树
// 递归结束条件:节点没有左右孩子节点了。
/ 分:获取俩个树的左子树1和右子树2
// 解:判断树1的左子树和树2的右子树是否是镜像的,树1的右子树和树2的左子树是否是镜像的
// 合:如果上述成立 且 根节点相同 则为相同二叉树
var isSymmetric = function (root) {
if (!root) return true;
const isMirror = (l, r) => {
// 递归的终点
if(!l && !r) return true;
// 判断树1的左子树和树2的右子树是否是镜像的,
// 树1的右子树和树2的左子树是否是镜像的 且 根节点是否相同
if(l && r && l.val === r.val &&
isMirror(l.left,r.right) &&
isMirror(l.right,r.left)
) {
return true;
} else {
return false;
}
}
return isMirror(root.left, root.right);
};