LeetCode题目链接
符合分而治之的特点
1.分:获取两个树的左子树和右子树
2.解:递归地判断树1的左子树和树2的右子树是否镜像,树1的右子树和树2的左子树是否镜像
3.合:如果上述都成立,且根节点值也相同,两个树就镜像
/**
* 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) {
if (!root) return true; // 如果是空树,则判断为是镜像的
const isMirror = (l, r) => {
if (!l && !r) return true; // 遍历到了叶子节点就是递归的终点
if (l && r && 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),n是树的节点个数,因为遍历到了所有的节点
空间复杂度是O(n),记住一点:凡是涉及到二叉树的空间复杂度,如果是递归的话,
就是O(n),因为最坏的情况下,树的高度等于树的节点个数
怎么样,是不是很简单,你学会了吗?
如果这篇文章能够帮助到您,希望您不要吝惜点赞和收藏,您的支持是我继续努力的动力 !!!