对称二叉树
对称二叉树可看作两棵树互为镜像。所以可以参考 相同的树 进行实现,不过要稍作修改。
递归
function check(p: TreeNode | null, q: TreeNode | null): boolean {
if (p === null && q === null) {
return true
} else if (p === null || q === null) {
return false
} else if (p.val !== q.val) {
return false
} else {
return check(p.left, q.right) && check(p.right, q.left)
}
}
function isSymmetric(root: TreeNode | null): boolean {
return check(root, root)
}
迭代
相对 same tree
提前结束判断,优化代码量。
function check(p: TreeNode | null, q: TreeNode | null): boolean {
// 根据队列先进先出实现广度优先
const queue = [p, q]
while (queue.length) {
const nodeP = queue.shift()!
const nodeQ = queue.shift()!
if (!nodeP && !nodeQ) continue
if ((!nodeP || !nodeQ) || (nodeP.val !== nodeQ.val)) return false
queue.push(nodeP.left)
queue.push(nodeQ.right)
queue.push(nodeP.right)
queue.push(nodeQ.left)
}
return true
}
function isSymmetric(root: TreeNode | null): boolean {
return check(root, root)
}