
js
var isSymmetric = function (root) {
// 100. 相同的树(改成镜像判断)
function isSameTree(p, q) {
if (p === null || q === null) {
return p === q
}
return p.val === q.val && isSameTree(p.left, q.right) && isSameTree(p.right, q.left)
}
return isSameTree(root.left, root.right)
}js
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
/**
* 判断二叉树是否是对称二叉树
* @param {TreeNode} root - 二叉树的根节点
* @return {boolean} - 二叉树是否对称
*/
var isSymmetric = function (root) {
// 定义递归辅助函数,用于对比左右两个子树是否对称
// L: 左子树的当前节点,R: 右子树的当前节点
const recur = function (L, R) {
// 情况1:左右节点都为空,说明当前位置对称,返回true
if (L === null && R === null) return true
// 情况2:只有一个节点为空,或者两个节点值不相等,说明不对称,返回false
if (L === null || R === null || L.val !== R.val) return false
// 情况3:递归对比:左子树的左节点 和 右子树的右节点,同时对比 左子树的右节点 和 右子树的左节点
// 只有两边都对称,整体才对称
return recur(L.left, R.right) && recur(L.right, R.left)
}
// 边界处理:如果根节点为空,直接返回true(空树是对称的)
// 否则调用递归函数,对比根节点的左右子树
return root === null || recur(root.left, root.right)
}