对称二叉树的判断条件:
- 根节点相同
- 左子树的右节点 = 右子树的左节点
- 左子树的左节点 = 右子树的右节点
// 对称树
const SymmetricalTree = {
val: 8,
left: {
val: 7,
left: { val: 6, left: null, right: null},
right: {val: 5, left: null, right: null}
},
right: {
val: 7,
left: { val: 5, left: null, right: null},
right: {val: 6, left: null, right: null}
}
}
// 非对称树
const BindaryTree = {
val: 8,
left: {
val: 7,
left: { val: 6, left: null, right: null},
right: {val: 5, left: null, right: null}
},
right: {
val: 7,
left: { val: 4, left: null, right: null},
right: {val: 3, left: null, right: null}
}
}
function isSymmetricalTree(pRoot) {
return isSymmetrical(pRoot, pRoot)
}
function isSymmetrical(node1, node2) {
if (!node1 && !node2) {
return true
}
if (!node1 || !node2) {
return false
}
if (node1.val != node2.val) {
return false
}
return isSymmetrical(node1.left, node2.right) && isSymmetrical(node1.right, node2.left)
}