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

算法训练营Day15(二叉树)

层序遍历 

102. 二叉树的层序遍历 - 力扣(LeetCode)

核心理解size存放的是当前这一层的,poll出来的时候,孩子可以放进去。但是这一层做的时候是通过szie判断这一层的,比如size==1,那就放到subRes,此时孩子节点也进去了,但是是size控制这一层的结果,加入res,进入下一循环。

(核心就是:弹出去一个就把孩子加到队列,通过size判断是这一层要弹出哪些。

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();Deque<TreeNode> deque = new LinkedList<>();if(root!=null){deque.add(root);}while (!deque.isEmpty()){int size = deque.size();List<Integer> subRes = new ArrayList<>();while (size-->0){TreeNode child = deque.poll();subRes.add(child.val);if(child.left!=null){deque.add(child.left);}if(child.right!=null){deque.add(child.right);}}res.add(subRes);}return res;}
}

107. 二叉树的层序遍历 II - 力扣(LeetCode)

class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> res = new ArrayList<>();Deque<TreeNode> deque = new ArrayDeque<>();if(root!=null){deque.add(root);}while(!deque.isEmpty()){int size = deque.size();List<Integer> subRes = new ArrayList<>();while (size-->0){TreeNode child = deque.poll();subRes.add(child.val);if(child.left!=null){deque.add(child.left);}if(child.right!=null){deque.add(child.right);}}res.add(subRes);}List<List<Integer>> bottomRes = new ArrayList<>();for (int i = res.size()-1; i >= 0; i--) {bottomRes.add(res.get(i));}return bottomRes;}
}

199. 二叉树的右视图 - 力扣(LeetCode)

就是在每一层遍历的时候,size=0的时候加结果里面,(1的时候符合条件,但是有个--操作,所以最后一个判断的时候是0)

class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res = new ArrayList<>();Deque<TreeNode> deque = new LinkedList<>();if(root!=null){deque.add(root);}while (!deque.isEmpty()){int size = deque.size();while (size-->0){TreeNode child = deque.poll();if(size==0){res.add(child.val);}if(child.left!=null){deque.add(child.left);}if(child.right!=null){deque.add(child.right);}}}return res;}
}

637. 二叉树的层平均值 - 力扣(LeetCode)

public List<Double> averageOfLevels(TreeNode root) {List<Double> res = new ArrayList<>();Deque<TreeNode> deque = new LinkedList<>();if(root!=null){deque.add(root);}while (!deque.isEmpty()){int size = deque.size();double sum = 0.0;//因为用到szie,不采用while循环方式for (int i = 0; i < size; i++) {TreeNode poll = deque.poll();sum += poll.val;if (poll.left != null) {deque.add(poll.left);}if (poll.right != null) {deque.add(poll.right);}}res.add(sum / size);}return res;}

226.翻转二叉树

226. 翻转二叉树 - 力扣(LeetCode)

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

101. 对称二叉树

101. 对称二叉树 - 力扣(LeetCode)

class Solution {public boolean isSymmetric(TreeNode root) {return symmetric(root.left,root.right);}private boolean symmetric(TreeNode left, TreeNode right) {if (left == null && right != null) {return false;}if (left != null && right == null) {return false;}if (left == null && right == null) {return true;}if (left.val != right.val) {return false;}boolean out = symmetric(left.left,right.right);boolean in = symmetric(left.right,right.left);return out && in;}
}

二刷回顾

补充剩下的简单题

代码随想录 (programmercarl.com)

二刷补充完层序遍历剩下的题目,以及101用层序和栈的方法解决,残缺版本如下:

public boolean isSymmetric1(TreeNode root) {Deque<TreeNode> deque = new LinkedList<>();if(root!=null){deque.add(root);}while (!deque.isEmpty()){int size = deque.size();if(size==1){deque.add(root.left);deque.add(root.right);continue;}Deque<TreeNode> stack = new LinkedList<>();for (int i = 0; i < size / 2; i++) {TreeNode poll = deque.poll();push(poll,deque);stack.add(poll);}for (int i = size/2; i < size; i++) {TreeNode poll = deque.poll();if(stack.pop()!=poll){return false;}push(poll,deque);}}return true;}private void push(TreeNode child,Deque<TreeNode> deque){if(child.left!=null) {deque.add(child.left);}else {deque.add(null);}if(child.right!=null){deque.add(child.right);}else {deque.add(null);}}

相关文章:

  • 【噪音控制 】 铁氧体磁珠
  • 多项式回归
  • CMMI评估认证,引领行业潮流!
  • 如何在社交场合中应对发作性睡病的影响?
  • 学习笔记 -- CAN系统基础
  • 【AI底层逻辑】——“数学华尔兹”之一元线性回归
  • 漏洞复现-iDocview某接口存在任意文件读取漏洞(附漏洞检测脚本)
  • Hasura GraphQL Engine 远程命令执行漏洞复现 [附POC]
  • thinkphp 中 关联查询 like 查询失效
  • C 语言 xml 库的使用
  • 【Go自学版】02-goroutine
  • 解决IDEA配置gitignore不生效
  • Go EASY游戏框架 之 RPC Guide 03
  • 【Mars3d】关于locationBar等控件的css样式冲突处理问题
  • Vue学习笔记-Vue3中的shallowReactive和shallowRef
  • python3.6+scrapy+mysql 爬虫实战
  • 时间复杂度分析经典问题——最大子序列和
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Markdown 语法简单说明
  • NSTimer学习笔记
  • react-native 安卓真机环境搭建
  • 面试遇到的一些题
  • 思维导图—你不知道的JavaScript中卷
  • 微信小程序实战练习(仿五洲到家微信版)
  • 一文看透浏览器架构
  • 用quicker-worker.js轻松跑一个大数据遍历
  • Prometheus VS InfluxDB
  • (003)SlickEdit Unity的补全
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)重识new
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (状压dp)uva 10817 Headmaster's Headache
  • *Django中的Ajax 纯js的书写样式1
  • .NET CF命令行调试器MDbg入门(一)
  • .Net CF下精确的计时器
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET下ASPX编程的几个小问题
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [codeforces] 25E Test || hash
  • [delphi]保证程序只运行一个实例
  • [DM复习]关联规则挖掘(下)