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

hot100 |八、二叉树

1-leetcode94. 二叉树的中序遍历

注意:√

  1. 递归方法已经很熟练了,两种不同的递归方式
  2. 迭代法需要注意,zrm就遇到了要求迭代实现,前序遍历和后续遍历其实不难,中序遍历用的少,注意看一看
// 1.递归方法1List<Integer> res = new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {traverse(root);return res;}private void traverse(TreeNode root) {if (root == null) {return;}traverse(root.left);// 中序位置res.add(root.val);traverse(root.right);}// 2.递归方法2public List<Integer> inorderTraversal1(TreeNode root) {List<Integer> res = new ArrayList<>();if (root == null) {return res;}res.addAll(inorderTraversal1(root.left));res.add(root.val);res.addAll(inorderTraversal1(root.right));return res;}// 3.迭代方法public List<Integer> inorderTraversal2(TreeNode root) {List<Integer> res = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();TreeNode cur = root;while (cur != null || !stack.isEmpty()) {if (cur != null) {stack.add(cur);cur = cur.left;}else {cur = stack.pop();res.add(cur.val);cur = cur.right;}}return res;}

2-leetcode104. 二叉树的最大深度

注意:√

  1. 动态规划思想,秒杀
    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;}

3-leetcode226. 翻转二叉树

注意:√

  1. 递归的思想,注意一下要提前保存左右的节点索引
    public TreeNode invertTree(TreeNode root) {if (root == null){return null;}TreeNode leftNode = root.left;TreeNode rightNode = root.right;root.left = invertTree(rightNode);root.right = invertTree(leftNode);return root;}

4-leetcode101. 对称二叉树

注意:×

  1. 建议直接使用队列的方式,不过注意加入队列的方式,很巧妙 左左,右右, 左右, 右左
    public boolean isSymmetric(TreeNode root) {LinkedList<TreeNode> queue = new LinkedList<>();queue.add(root.left);queue.add(root.right);while (queue.size()>0){TreeNode le = queue.pollFirst();TreeNode ri = queue.pollFirst();if (le == null && ri == null){continue;}if (le == null || ri == null){return false;}if (le.val != ri.val) {return false;}queue.add(le.left);queue.add(ri.right);queue.add(le.right);queue.add(ri.left);}return true;}

5-leetcode543. 二叉树的直径

注意:×

  1. 学习Labuladong,这题可以由maxDepth转过来
  2. 注意的地方是,这个题目要的是二叉树的直径,也就是路径值,路径值和深度需要体会一下
  3. 直径长就是左右两个深度加起来
    int res = 0;public int diameterOfBinaryTree(TreeNode root) {int x = maxDepth(root);return res;}public int maxDepth(TreeNode root) {if (root == null){return 0;}int leftDepth = maxDepth(root.left);int rightDepth = maxDepth(root.right);int curDepth = leftDepth + rightDepth;res = Math.max(curDepth, res);return Math.max(leftDepth, rightDepth) +1;}

6-leetcode102. 二叉树的层序遍历

注意:××

  1. 注意加入queue的时候,要判断是不是空
  2. while循环判断是不是空,不要用size会浪费时间
  3. 最开始就给res = new LinkedList这样判断root == null的时候可以直接返回结果
    public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new LinkedList<>();if (root == null){return res;}LinkedList<TreeNode> queue = new LinkedList<>();queue.add(root);// while (queue.size()>0){while (! queue.isEmpty()){int num = queue.size();List<Integer> list = new LinkedList<>();for (int i = 0; i < num; i++) {TreeNode node = queue.poll();list.add(node.val);if (node.left != null){queue.add(node.left);}if (node.right != null){queue.add(node.right);}}res.add(list);}return res;}

leetcode

注意:√×


http://www.lryc.cn/news/394058.html

相关文章:

  • Matlab协方差矩阵分解法生成随机场
  • android 在清单文件中配置receiver,系统是何时会注册此广播接收者的?
  • 嵌入式硬件电路常用设计软件
  • c#的List<T>的SelectMany 和Select
  • 69.WEB渗透测试-信息收集- WAF、框架组件识别(9)
  • ASCII码对照表(Matplotlib颜色对照表)
  • Mysql-常用函数及其用法总结
  • 【c++刷题笔记-数组】day29:452. 用最少数量的箭引爆气球、 435. 无重叠区间 、 763.划分字母区间
  • 【数据结构】链表带环问题分析及顺序表链表对比分析
  • 快速解决找不到krpt.dll,无法继续执行代码问题
  • C# List、LinkedList、Dictionary性能对比
  • 【Spring Cloud】微服务的简单搭建
  • 全球首款商用,AI为视频自动配音配乐产品上线
  • Git管理源代码、git简介,工作区、暂存区和仓库区,git远程仓库github,创建远程仓库、配置SSH,克隆项目
  • 【机器学习】机器学习与时间序列分析的融合应用与性能优化新探索
  • 执行力不足是因为选择模糊
  • 力扣 225题 用队列实现栈 记录
  • 中英双语介绍意大利(Italy):有哪些著名景点、出名品牌?
  • Python【打包exe文件两步到位】
  • 基于模型预测控制的PMSM系统速度环控制理论推导及仿真搭建
  • 【PYG】GNN和全连接层(FC)分别在不同的类中,使用反向传播联合训练,实现端到端的训练过程
  • vue3使用方式汇总
  • Turborepo简易教程
  • 初中物理知识点总结(人教版)
  • ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建等高级进阶
  • 【开源项目】LocalSend 局域网文件传输工具
  • ARM/Linux嵌入式面经(十一):地平线嵌入式实习
  • 基于Redis的分布式锁
  • 如何将 Apifox 的自动化测试与 Jenkins 集成?
  • 【FFmpeg】av_write_frame函数