剑指offer-对称的二叉树

Posted by franki on May 4, 2021

对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

思路

通过前序遍历和对称前序遍历序列来判断二叉树是不是对称的,如果两个序列是一样的,那么二叉树是对称的。

代码

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isSymmetric = function(root) {
    return isSymmetrics(root, root);
};

function isSymmetrics(pRoot, rRoot) {
    if (pRoot === null && rRoot === null) {
        return true;
    }
    if (pRoot === null || rRoot === null) {
        return false;
    }
    if (pRoot.val !== rRoot.val) {
        return false;
    }
    return isSymmetrics(pRoot.left, rRoot.right) && isSymmetrics(pRoot.right, rRoot.left);
}

复杂度分析

  • 时间复杂度: O(N)
  • 空间复杂度: O(N)