Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 数组

  • 链表

  • 字符串

  • 二叉树

    • 102.二叉树的层序遍历
    • 103.二叉树的锯齿形层序遍历
    • 124.二叉树中的最大路径和
    • 236.二叉树的最近公共祖先
    • 105.从前序与中序遍历序列构造二叉树
    • 662.二叉树最大宽度
    • 1080. 根到叶路径上的不足节点
    • 101. 对称二叉树
      • 226. 翻转二叉树
      • 114. 二叉树展开为链表
      • 1110. 删点成林
      • 337. 打家劫舍 III
      • 979. 在二叉树中分配硬币
      • 222. 完全二叉树的节点个数
      • 513. 找树左下角的值
      • 968. 监控二叉树
      • 剑指offer34
      • 剑指 Offer 32 - III. 从上到下打印二叉树 III
      • 剑指 Offer 33. 二叉搜索树的后序遍历序列
      • 线索二叉树

      • 二叉搜索树

    • 动态规划

    • 深搜回溯

    • 数学贪心

    • 堆栈队列

    • 前缀和

    • 算法设计

    • 位运算

    • WA

    • 算法
    • 二叉树
    phan
    2023-05-25
    目录

    101. 对称二叉树

    # 101. 对称二叉树 (opens new window)

    解题思路:使用两个指针同时遍历二叉树,两个指针遍历时,左右子树的顺序相反。

    # 第一版

    用一个指针遍历两次,两次二叉树遍历的顺序相反,每次遍历都用序列统计当前二叉树的节点值,最后比较两个序列每个位置上的值是否相同。这种方法无论是中序遍历还是后序遍历都难免会有一些特殊情况,比如:[5,4,1,null,1,null,4,2,null,2,null]。而如果是层序遍历,中间的空节点需要额外做处理。

    # 第二版

    因此为了排除一些特殊情况,以及子树为空节点,最稳妥的做法就是两个节点同时反序遍历,这样一定能够保证两个节点所指向的TreeNode是对称的位置。写的时候要注意,p和q节点最终都会遍历整个二叉树,因此每个节点不仅要遍历左子树,还要遍历右子树。

    遍历时,有如下情况不满足对称:

    • 其中一个节点指向的是null
    • 两个节点的值不相等
    • 两个节点的子树遍历时不满足对称条件
    class Solution {
        public boolean isSymmetric(TreeNode root) {
            return check(root,root);
        }
        public boolean check(TreeNode p,TreeNode q){
            if(p==null&&q==null) return true;
            if((p==null&&q!=null)||(p!=null&&q==null)) return false;
            return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
    
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    编辑 (opens new window)
    #Leetcode#二叉树
    上次更新: 2023/12/15, 15:49:57
    1080. 根到叶路径上的不足节点
    226. 翻转二叉树

    ← 1080. 根到叶路径上的不足节点 226. 翻转二叉树→

    Theme by Vdoing | Copyright © 2023-2024 blageCoder
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式