[路飞]_leetcode-101-对称二叉树

97 阅读1分钟

[题目地址]

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

进阶:

你可以运用递归和迭代两种方法解决这个问题吗?

解题思路

如果左右子树为空说明相等返回true
如果左子树是空的,右子树不为空 返回false
如果两个节点值相同,判断左子树的左子树等于右子树的右子树,左子树的右子树等于右子树的左子树

递归解题

var isSymmetric = function(root) {
    if(!root) return true;
    return isMirror(root.left, root.right)
};

function isMirror(leftroot,rightroot){
    // 如果左右子树为空说明相等返回true
    if(!leftroot && !rightroot) return true;
    // 如果左子树是空的,右子树不为空 返回false
    if(!leftroot) return false;
    if(!rightroot) return false;
    // 如果两个节点值相同,判断左子树的左子树等于右子树的右子树
    // 左子树的右子树等于右子树的左子树
    if(leftroot.val == rightroot.val 
        && isMirror(leftroot.left,rightroot.right)
        &&isMirror(leftroot.right,rightroot.left))
        {
        return true;
    }else{
        return false;
    }
}

至此我们就完成了leetcode-101-对称二叉树