Shu-How Zの小窝

Loading...

101.对称二叉树

var isSymmetric = function(root) {
    if(!root) return true;
    return isMirror(root.left, root.right);
};
function isMirror(left, right) {
    if(!left && !right) return true;
    if(!left || !right) return false;
    if(left.val !== right.val) return false;
    // 判断左右子树是否对称 (左子树的左节点和右子树的右节点, 左子树的右节点和右子树的左节点)
    return isMirror(left.right, right.left) && isMirror(left.left, right.right);
}

针对你提供的 isSymmetric 函数,可以从代码可读性和性能两个方面进行优化。以下是具体的优化建议:

1. 提升代码可读性

  • 函数命名isMirror 函数可以更明确地命名为 isSymmetricTrees,以更好地表达其功能。
  • 注释优化:现有的注释可以更加简洁明了,避免冗余。

2. 性能优化

  • 递归深度优化:当前的递归方式在处理大型树时可能会导致栈溢出。可以通过迭代的方式使用队列或栈来实现对称性检查,减少递归深度。
  • 提前返回:在比较节点值时,如果发现不对称可以直接返回 false,避免不必要的递归调用。

优化后的代码示例

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

function isSymmetricTrees(left, right) {
    const queue = [];
    queue.push(left);
    queue.push(right);

    while (queue.length > 0) {
        left = queue.shift();
        right = queue.shift();

        if (!left && !right) continue;
        if (!left || !right) return false;
        if (left.val !== right.val) return false;

        queue.push(left.left);
        queue.push(right.right);
        queue.push(left.right);
        queue.push(right.left);
    }

    return true;
}

3. 迭代版本的优势

  • 避免递归深度过大:通过使用队列进行广度优先搜索(BFS),可以有效避免递归深度过大的问题。
  • 提高性能:迭代版本在处理大规模数据时通常比递归版本更快,因为减少了函数调用的开销。
posted @ 2024-12-21 14:43  KooTeam  阅读(11)  评论(0)    收藏  举报