当前位置: 首页 > news >正文

HOT100--Day13--104. 二叉树的最大深度,226. 翻转二叉树,101. 对称二叉树

HOT100–Day13–104. 二叉树的最大深度,226. 翻转二叉树,101. 对称二叉树

每日刷题系列。今天的题目是《力扣HOT100》题单。

题目类型:二叉树。

关键:要深刻理解《递归》

104. 二叉树的最大深度

方法:递归

思路:

自下而上地统计。(相当于后序遍历)

  • 如果node是null,返回0
  • 遍历node.left和node.right
  • 取较大者,加一,返回给上一层。(为什么这里要“+1”,因为要告诉上一层“我这里有一层”,这个“一层”就是“+1”的效果。)
class Solution {public int maxDepth(TreeNode root) {if (root == null) {return 0;}int leftDepth = maxDepth(root.left);int rightDepth = maxDepth(root.right);return Math.max(leftDepth, rightDepth) + 1;}
}

方法:递归

思路:

自顶向下地统计。(相当于前序遍历)

class Solution {private int res;public int maxDepth(TreeNode root) {dfs(root, 0);return res;}private void dfs(TreeNode node, int depth) {if (node == null) {return;}depth++;res = Math.max(res, depth);dfs(node.left, depth);dfs(node.right, depth);}
}

方法:迭代

思路:

层序遍历。有多少层就有深。

  • 利用queue来记录每层的节点。
  • 遍历完一层之后,记录size。
  • 下一层遍历queue中的size个节点。
class Solution {public int maxDepth(TreeNode root) {if (root == null) {return 0;}Deque<TreeNode> que = new ArrayDeque<>();int depth = 0;que.offer(root);while (!que.isEmpty()) {depth++;int size = que.size();while (size-->0) {TreeNode cur = que.poll();if (cur.left != null) {que.offer(cur.left);}if (cur.right != null) {que.offer(cur.right);}}}return depth;}
}

226. 翻转二叉树

思路:

自顶向下。

先交换左右子树,再进入下一层。递归解决。

class Solution {public TreeNode invertTree(TreeNode root) {if (root == null) {return null;}// 先交换左右子树,再进入下一层TreeNode temp = root.left;root.left = root.right;root.right = temp;invertTree(root.left);invertTree(root.right);return root;}
}

思路:

自底向上。

先递归到最下层,交换左右节点。再返回给上层。

class Solution {public TreeNode invertTree(TreeNode root) {if (root == null) {return null;}TreeNode left = invertTree(root.left);TreeNode right = invertTree(root.right);root.left = right;root.right = left;return root;}
}

101. 对称二叉树

思路:

先反转左子树,再和右子树比较是否相等。

class Solution {public boolean isSymmetric(TreeNode root) {if (root == null) {return true;}// 先反转左子树invertTree(root.left);// 再和右子树比较是否相等return isSameTree(root.left, root.right);}// 226. 翻转二叉树private TreeNode invertTree(TreeNode root) {if (root == null) {return null;}TreeNode left = invertTree(root.left);TreeNode right = invertTree(root.right);root.left = right;root.right = left;return root;}// 100. 相同的树private boolean isSameTree(TreeNode p, TreeNode q) {if (p == null || q == null) {return p == q;}return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}
}

思路:

直接改造isSameTree方法。

要判断三个条件:

1,该节点值是否相等。

2,left的左子树和right的右子树是否相等。

3,left的右子树和right的左子树是否相等,

class Solution {public boolean isSymmetric(TreeNode root) {return isSameTree(root.left, root.right);}// 在【100. 相同的树】的基础上稍加改动private boolean isSameTree(TreeNode p, TreeNode q) {if (p == null || q == null) {return p == q;}return p.val == q.val && isSameTree(p.left, q.right) && isSameTree(p.right, q.left);}
}

文章转载自:

http://IZ31eul2.ycwym.cn
http://ryS2CAZ6.ycwym.cn
http://BLwH6cau.ycwym.cn
http://3iXvuPaI.ycwym.cn
http://b1aGBQzP.ycwym.cn
http://7esnagYw.ycwym.cn
http://9oiunqPn.ycwym.cn
http://lswfQCL5.ycwym.cn
http://yoXE1kYQ.ycwym.cn
http://OiX94O06.ycwym.cn
http://lqWyqUsB.ycwym.cn
http://VpIjbhwk.ycwym.cn
http://k9qc0dA4.ycwym.cn
http://0Dnpt5cE.ycwym.cn
http://j2kJNUY2.ycwym.cn
http://oCWOwQnp.ycwym.cn
http://mxzEFnWg.ycwym.cn
http://J2jqHfGS.ycwym.cn
http://CYcCiiCB.ycwym.cn
http://YD4kMfNG.ycwym.cn
http://VIdx3K7l.ycwym.cn
http://bbMsZzqg.ycwym.cn
http://ENqIopQN.ycwym.cn
http://estkjD6f.ycwym.cn
http://jEMtY4cw.ycwym.cn
http://Mug9IZVB.ycwym.cn
http://avEasaNk.ycwym.cn
http://5XUEZ30K.ycwym.cn
http://jdpU9kgw.ycwym.cn
http://uRwpYUsg.ycwym.cn
http://www.dtcms.com/a/370903.html

相关文章:

  • 修复存在坏块或05、C4、C5 S.M.A.R.T错误的硬盘
  • LwIP入门实战 — 4 LwIP的网络接口管理
  • rapidocr v3.4.0发布了
  • 硬件开发_基于物联网的老人跌倒监测报警系统
  • ARM体系结构学习①
  • 【LeetCode热题100道笔记】验证二叉搜索树
  • 垃圾收集器分类
  • AQS原理
  • Nestjs框架: 使用 CASL 库实现基于角色的权限控制(RBAC)与细粒度访问控制的实战演示
  • 计算机主板上的那颗纽扣电池的作用是什么?
  • 【Java实战㉗】Java日志框架实战:Logback与Log4j2的深度探索
  • 【关于线程的一些总结】
  • PyQt5 入门(上):开启 GUI 编程之旅
  • 本体论中的公理与规则——从经典逻辑到神经符号融合的演进
  • linux 内核 - 内核设计原则
  • Vue3中SCSS的使用指南
  • 音转文模型对比FunASR与Faster_whisper
  • 【YOLOv11】3.Pycharm配置
  • 常用配置文件
  • MySQL运维补充
  • JVM中如何调优新生代和老生代?
  • Transformer 架构的演进与未来方向(RNN → Self-Attention → Mamba)——李宏毅大模型2025第四讲笔记
  • 企业级监控方案对比:Zabbix vs Prometheus
  • 【Kubernetes】知识点总结6
  • 力扣3495. 使数组元素都变为零的最少操作次数 详解
  • 新能源研发,用新型实验记录本:ELN
  • 【LeetCode热题100道笔记】将有序数组转换为二叉搜索树
  • 【LeetCode热题100道笔记】二叉树的直径
  • 2023年ASOC SCI2区TOP,改进元启发式算法+考虑医护人员技能水平的家庭健康护理路径规划,深度解析+性能实测
  • wpf之TextBlock