一日一练:对称二叉树

141 阅读1分钟

给你一个二叉树的根节点 root , 检查它是否轴对称。

思路:

  1. 从根节点开始对比,如果只有根节点那么肯定是对称的
  2. 然后判断根节点的左节点left1与右节点right1是否存在且值相等,如果不满足,即不是对称,退出比较;如果还是满足,则继续比较
  3. 这次比较的是 left1的左节点与right1的右节点 以及 left1的右节点与 right1的左节点,如果存在且对应值相等,继续比较
  4. 。。。

image.png

虚线连接的为对比的节点对

这里有个技巧,根节点可以看做跟自己对比,然后再交叉比对他们的左右节点是否对称。这里用递归实现

function isSymmetric(root: TreeNode | null): boolean {
  function dfs(left: TreeNode | null, right: TreeNode | null): boolean {
    // 都为null为对称
    if (left === null && right === null) return true
    // 其中一个为null,则不对称
    if (left === null || right === null) return false
    // 值不相等也不对称
    if (left.val !== right.val) return false
    // 递归比对
    return dfs(left.left, right.right) && dfs(left.right, right.left)
  }
  return dfs(root, root)
}