leetcode刷题-101对称二叉树

123 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode-101对称二叉树

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

       1
      / \
     2   2
    / \ / \
   3  4 4  3 

解题思路分析

解法1

对称二叉树从含义可以看出,相当于节点的左右子树完全对称。因此采用一个递归的思路,符合二叉树的一贯处理思想。要注意的是,左子树和右子树要区分处理。也就是左子树的右节点和右子树的左节点比较。左子树的左节点和右子树的右节点比较。只要对应的节点值同时存在或同时不存在,或者值相等,则认为局部对称。经过递归就可以推导出全局都是对称二叉树,也就是整个二叉树是对称二叉树。二叉树的解题思路主要是通过递归,将局部性质进行推广,得到全局共有的属性。 代码分析:

public boolean isSymmetric(TreeNode root) {
    if(root == null){
        return true;
    }
    return isTheSame(root.left,root.right);
}

public boolean isTheSame(TreeNode node1,TreeNode node2){
    if(node1 == null && node2 != null || node2 == null && node1 != null){
        return false;
    }
    if(node1 == null && node2 == null){
        return true;
    }
    return node1.val == node2.val && isTheSame(node1.left,node2.right) && isTheSame(node1.right,node2.left);
}

复杂度分析

  • 时间复杂度 o(n)
  • 空间复杂度 o(1)

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。