101.Symmetric_Tree

25 年 7 月 2 日 星期三
381 字
2 分钟

101. Symmetric Tree

Screenshot 2026-03-07 at 10.49.43 am
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)
}

文章标题:101.Symmetric_Tree

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/101symmetric_tree[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。