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

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://www.xdnf.cn/news/20192.html

相关文章:

  • Docker入门到精通:从零基础到生产部署
  • 如何在路由器上配置DHCP服务器?
  • 本体论中的公理与规则——从经典逻辑到神经符号融合的演进
  • Hive on Tez/Spark 执行引擎对比与优化
  • AI浪潮下,人类创造力的“危”与“机”
  • 2026届大数据毕业设计选题推荐-基于大数据旅游数据分析与推荐系统 爬虫数据可视化分析
  • JAVA基本文件操作
  • 【74页PPT】MES简介(附下载方式)
  • TensorFlow 面试题及详细答案 120道(101-110)-- 底层原理与扩展
  • C++笔记之软件设计原则总结
  • Lua > Mac Mini M4安装openresty
  • 基于Transformer 实现车辆检测与车牌识别(一)
  • disable CASCADE主键失败 ORA-2297 And ORA-2433
  • MCAP :机器人数据容器的全面实践指南
  • 区块链是什么
  • UE5 图表、函数与宏的区别与选择(蓝图折叠功能详解)
  • 【iOS】push 和 present
  • 什么时候用no,什么时候用non,什么时候用not?
  • 京东商品属性API数据解析:颜色、尺寸与材质
  • 【代码随想录算法训练营——Day4】链表——24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题02.07.链表相交、142.环形链表II
  • 操作系统基本概念.1
  • Day 47 注意力热图可视化
  • 工作后的总结和反思4
  • SQL 入门指南:排序与分页查询(ORDER BY 多字段排序、LIMIT 分页实战)
  • 使用Shell脚本实现Linux系统资源监控邮件告警
  • 永磁同步电机 FOC 控制中 d、q 轴杂谈与角度偏移影响
  • 使用Ansible自动化部署Hadoop集群(含源码)--环境准备
  • 【Android】ViewPager2结合Fragment实现多页面滑动切换
  • 百度竞价推广:搜索竞价信息流推广代运营
  • ElementUI之Upload 上传的使用