思路:
- 从根节点开始对比,如果只有根节点那么肯定是对称的
- 然后判断根节点的左节点
left1与右节点right1是否存在且值相等,如果不满足,即不是对称,退出比较;如果还是满足,则继续比较 - 这次比较的是
left1的左节点与right1的右节点 以及left1的右节点与right1的左节点,如果存在且对应值相等,继续比较 - 。。。
虚线连接的为对比的节点对
这里有个技巧,根节点可以看做跟自己对比,然后再交叉比对他们的左右节点是否对称。这里用递归实现
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)
}