对称的二叉树(JS)

对称的二叉树

http://www.nowcoder.com/questionTerminal/ff05d44dfdb04e1d83bdbdab320efbcb

请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

首先:空二叉树为对称的
其次:可以先判断第二层是否有个为空有个不为空,直接返回false
然后就是一个先序遍历了,因为对称的话,左边的要对右边的,
1:从左树开始,如果节点存在则在字符串后插入它的节点值,节点为空则插入#
然后遍历它的左节点,再遍历他的右节点,最后返回一个左树的字符串
2:从右树开始,右树跟左树相似,主要是左树的是从左到右遍历,而右树需要从右到左遍历,这样才算是一个镜像对称。

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function isSymmetrical(pRoot)
{
    // write code here
    if(pRoot == null) return true
    if((pRoot.left==null&&pRoot.right!=null) || (pRoot.right==null&&pRoot.left!=null)){
        return false
    }
    let left = "", right = ""
    let LNode = pRoot.left,RNode = pRoot.right
    left = getNodeStr(LNode,left,0)
    right = getNodeStr(RNode,right,1)
    if(left == right) return true
    return false
}
function getNodeStr(root,str,k){
    if(root === null){
        str += "#"
        return str
    }
    str += root.val
    if(k==0){
        str = getNodeStr(root.left,str,k)
        str = getNodeStr(root.right,str,k)
    }
    else{
        str = getNodeStr(root.right,str,k)
        str = getNodeStr(root.left,str,k)
    }
    return str;
}
module.exports = {
    isSymmetrical : isSymmetrical
};
全部评论

相关推荐

半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
07-14 12:29
门头沟学院 Java
后端岗,实习三周感觉有点想跑路了,担心秋招被拉黑,有没有佬是字节HR知道情况的
从零开始的转码生活:你实习三周都想跑路,将来拿到offer真的愿意在这干十几二十年吗
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务