BFS广度优先遍历
var isSymmetric = function(root) {
if(!root){return true}
let stack = [root.left,root.right]
let res = true
function search(stack){
if(stack.length ===0) return null
let left = stack.shift()
let right = stack.shift()
if(!left && !right) return search(stack) // 2种都为空继续执行队列里的父节点
if(!left || !right) return res = false // 有一个为空直接返回false
if(left.val !== right.val) return res = false // 值不相等返回false
stack.push(left.left)
stack.push(right.right)
stack.push(right.left)
stack.push(left.right)
search(stack)
}
search(stack)
return res
}
DFS深度优先遍历
核心思想是,同时对比遍历的两个节点的左右子节点值
var isSymmetric = function(root) {
if(!root) return true
function search(left,right){
if(!left && !right){
return true // 当左右子节点都是空的时候返回true
}
if(!left || !right){
return false
}
if(left.val !== right.val){
return false
}
return search(left.left, right.right) && search(right.left, left.right) // 同时对比 左右子树中 对称的父节点
}
return search(root.left, root.right)
}