判断二叉树是否对称[JS]

判断二叉树是否对称

http://www.nowcoder.com/questionTerminal/1b0b7f371eae4204bc4a7570c84c2de1

迭代解法
逐层遍历二叉树,得到当前层的节点后头尾互查做比较。做法比较直接

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)


}
全部评论

相关推荐

双非阴暗爬行:我来看看笑死我了,这名字取得好想笑(没有不好的意思)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务