迭代解法
逐层遍历二叉树,得到当前层的节点后头尾互查做比较。做法比较直接
function isSymmetric( root ) {
// write code here
if(root==null) return true
let cur_lvl = [root]
while(cur_lvl.length>0){
for(let i=0;i<Math.floor(cur_lvl.length/2);i++){
//判断是否对称
if(cur_lvl[i]==null &&cur_lvl[cur_lvl.length-1-i]==null) continue
if(cur_lvl[i]==null || cur_lvl[cur_lvl.length-1-i]==null||cur_lvl[i].val !== cur_lvl[cur_lvl.length-1-i].val) return false
}
cur_lvl = next_lvl(cur_lvl)
console.log(cur_lvl.length)
if(cur_lvl.length%2!==0) return false//长度必须为偶数。
}
return true
}
function next_lvl(arr){//返回下一行的节点
let nxt_lvl = []
for(let item of arr){
if(item!==null){
nxt_lvl.push(item.left);
nxt_lvl.push(item.right)
}
}
return nxt_lvl
}递归解法
找到中心对称的节点对,相互比较。
function isSymmetric( root ) {
if(!root) return true
return symmetric( root.left,root.right)
}
function symmetric( leftNode,rightNode ) {
if(!leftNode&&!rightNode) return true
if(leftNode==null || rightNode==null || leftNode.val!==rightNode.val){
return false
}
return symmetric(leftNode.right,rightNode.left)&&symmetric(leftNode.left,rightNode.right)
}
京公网安备 11010502036488号