leetcode-0101 对称二叉树

Posted guolizhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-0101 对称二叉树相关的知识,希望对你有一定的参考价值。

题目地址 https://leetcode-cn.com/problems/symmetric-tree/

1.递归

本题最简单的思路是递归,可以假设两棵一模一样的树在进行镜像对比。他们之间的关系满足node1.left == node2.rightnode1.right == node2.left
时间复杂度O(n) n为节点的个数;空间复杂度O(h) h为二叉树的最大深度

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return mirror(root, root);
    }
    private boolean mirror(TreeNode node1, TreeNode node2) {
        if (node1 == null && node2 == null) return true;
        if (node1 == null || node2 == null) return false;
        return node1.val == node2.val
            && mirror(node1.left, node2.right)
            && mirror(node2.left, node1.right);
    }
}

2.BFS

广度优先搜索思路还是和递归一样,假设是两棵一模一样的树在进行镜像对比。时间复杂度O(n) 空间复杂度O(n)

public boolean isSymmetric(TreeNode root) {
  Queue<TreeNode> q = new LinkedList<>();
  q.add(root);
  q.add(root);
  while (!q.isEmpty()) {
      TreeNode t1 = q.poll();
      TreeNode t2 = q.poll();
      if (t1 == null && t2 == null) continue;
      if (t1 == null || t2 == null) return false;
      if (t1.val != t2.val) return false;
      q.add(t1.left);
      q.add(t2.right);
      q.add(t1.right);
      q.add(t2.left);
  }
  return true;
}

java版本

class Solution {
    public boolean isSymmetric(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        if (root == null)
            return true;
        queue.offer(root);
        queue.offer(root);
        while(!queue.isEmpty()) {
            TreeNode node1 = queue.poll();
            TreeNode node2 = queue.poll();
            if (node1 == null && node2 == null)
                continue;
            if (node1 == null || node2 == null)
                return false;
            if (node1.val != node2.val)
                return false;
            queue.offer(node1.left);
            queue.offer(node2.right);
            queue.offer(node1.right);
            queue.offer(node2.left);
        }
        return true;
    }
}

更多LeetCode题解和数据结构方面的内容,可以关注我的github,求个star~ ▄█▔▉●

以上是关于leetcode-0101 对称二叉树的主要内容,如果未能解决你的问题,请参考以下文章

判断二叉树是否对称的代码

2021-10-05:对称二叉树。给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。力扣101。

101. 对称二叉树

101. 对称二叉树

面试题28:对称的二叉树

剑指offer面试题 28. 对称的二叉树