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),可以有效避免递归深度过大的问题。
- 提高性能:迭代版本在处理大规模数据时通常比递归版本更快,因为减少了函数调用的开销。