前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >101 对称二叉树

101 对称二叉树

作者头像
木瓜煲鸡脚
发布2021-01-18 15:27:08
2770
发布2021-01-18 15:27:08
举报
文章被收录于专栏:Jasper小笔记Jasper小笔记

01

题目信息

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

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

示例1:是对称的

代码语言:javascript
复制
    1
   / \
  2   2
 / \ / \
3  4 4  3

示例2:不对称

代码语言:javascript
复制
    1
   / \
  2   2
   \   \
   3    3

02

解法一:递归

我们先来划分子问题,一个树对称也就最终根节点的左子树与右子树是对称的镜像的,那么要求左子节点与右子节点相等的同时左节点的左子树(右子树)与右节点的右子树(左子树)对称,还是画个图吧

我们传入这两颗树看是否对称,那么有三个操作:

  • 第一两个根节点是否相等
  • 第二它左子树是否与另外一个的右子树对称
  • 第三它的右子树是否与另外一个的左子树对称

每次递归传递一对树,直到最后叶子只有节点节点比较

代码语言:javascript
复制
public boolean isSymmetric(TreeNode root) {
    //第一次传root让下面顺便进行空判断
    return check(root, root);
}
public boolean check(TreeNode p, TreeNode q) {
    //都为空则没有子树,两个根相等就是对称
    if (p == null && q == null) return true;
    //不满足上面条件,则是一个有子树一个没有那么不对称
    if (p == null || q == null) return false;
    //三个条件结合
    return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
}

遍历了整颗树时间复杂度为O(n),递归系统栈占用大小取决于树的层度这里不是完全二叉树所以它只是小于n空间复杂度为O(n)

03

方法二:迭代

递归思路写完了,栈换成队列使用广度的方式完成同样的思路,还是再画个图

通过队列依次按照顺序比较offer进队列时就是一个树的左(右)与另一个树的右(左),poll出队列的两个也就是对应的,直到对队列没有后续进来的为空了仍然没出现不满足情况的,则是对称二叉树

代码语言:javascript
复制
public boolean isSymmetric(TreeNode root) {
    return check(root, root);
}

public boolean check(TreeNode p, TreeNode q) {
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    queue.offer(p);
    queue.offer(q);
    while (!queue.isEmpty()) {
        //每次出两个
        p = queue.poll();
        q = queue.poll();
        //对称比较的条件
        if (p == null && q == null) continue;
        if ((p == null || q == null) || (p.val != q.val)) return false;
        //按顺序进队列
        queue.offer(p.left);
        queue.offer(q.right);

        queue.offer(p.right);
        queue.offer(q.left);
    }
    return true;
}

时间复杂度与空间复杂度同上

04

总结

无外乎深度优先与广度优先,上面的两种解都是优的解在一次树的遍历过程中完成对是否是对称的判断。如果直接暴力的还可先遍历一遍得到序列或者数组再判断,比如先序遍历与后序遍历序列相反,比如中序遍历结果是回文的,总之我们要先对遍历熟悉。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT那个小笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01
  • 02
  • 03
  • 04
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档