力扣链接:101.对称二叉树
难度:⭐
✏️ 方法一:
解题关键词:二叉树
、递归
解题思路:使用递归判断外侧和内侧元素是否相等。
typescript
function isSymmetric(root: TreeNode | null): boolean {
// 对比左右节点
const compare = (left: TreeNode | null, right: TreeNode | null) => {
// 如果都是 null,那么相等
if (left === null && right === null) return true;
// 有一个为 null,那么不相等
if (left === null || right === null) return false;
// 值不相等
if (left.val !== right.val) return false;
// 比较外侧,即左子树的左边和右子树的右边
const outside = compare(left.left, right.right);
// 比较内侧,即左子树的右边和右子树的左边
const inside = compare(left.right, right.left);
// 左右子树都相等,才可以
return outside && inside;
};
return compare(root.left, root.right);
}
✏️ 方法二:
解题关键词:二叉树
、迭代法
解题思路:使用递归判断外侧和内侧元素是否相等。
typescript
function isSymmetric(root: TreeNode | null): boolean {
// 队列
const queue: TreeNode[] = [root, root];
while (queue.length) {
// 代表左边的子树
const left = queue.shift();
// 代表右边的子树
const right = queue.shift();
// 如果都是 null,那么继续比较
if (left === null && right === null) continue;
// 如果有一个为 null,另一个不为 null
// 值不相等
if (left === null || right === null || left.val !== right.val) return false;
// 对比外侧
queue.push(left.left, right.right);
// 对比内侧
queue.push(left.right, right.left);
}
return true;
}