解题步骤
- 分:获取两个树的左子树和右子树
- 解:递归地判断树1的左子树和树2的右子树是否镜像,树1的右子树和树2的左子树是否镜像
- 合:如果上述都成立,且根节点值也相同,两个树就镜像
通过分而治之思想实现
- 时间复杂度:O (n)
空间复杂度:O (h)
function isSymmetric(root) {
if (!root) return true;
const isMirror = (l, r) => {
if (!l && !r) return true;
if (!l || !r) return false;
if (l.val === r.val && isMirror(l.left, r.right) && isMirror(l.right, r.left)) {
return true;
}
return false;
};
return isMirror(root.left, root.right);
}
代码中利用递归遍历了树的所有节点,所以时间复杂度是 O (n) ,而空间复杂度是 O (h) h 是树的高度,因为存在调用堆栈占据了空间。