298. Binary Tree Longest Consecutive Sequence

先序遍历,根左右。如果该节点的 value == 父节点value + 1, 则长度+1; 否则重置为1。

  1. class Solution {
  2. private int res = 0;
  3. public int longestConsecutive(TreeNode root) {
  4. if(root == null) return 0;
  5. dfs(root, root.val, 0);
  6. return res;
  7. }
  8.  
  9. private void dfs(TreeNode root, int v, int out){
  10. if(root == null) return;
  11. if(root.val == v + 1){
  12. out++;
  13. }else{
  14. out = 1;
  15. }
  16. res = Math.max(res, out);
  17. dfs(root.left, root.val, out);
  18. dfs(root.right, root.val, out);
  19. }
  20. }

250. Count Univalue Subtrees

后序遍历,左右根。

如果节点为叶子节点则 count++,并验证该节点是否与父节点的值相同,是则为true。如果节点和左右子树返回值都是true,则count++。

  1.叶节点也都相同,count++。

  2.对于当前遍历到的节点,如果对其左右子节点分别递归调用函数,返回均为true的话,那么说明当前节点的值和左右子树的值都相同,那么又多了一棵树,所以结果自增1

  1. class Solution {
  2. private int count;
  3. public int countUnivalSubtrees(TreeNode root) {
  4. count = 0;
  5. helper(root, Integer.MAX_VALUE);
  6. return count;
  7. }
  8.  
  9. private boolean helper(TreeNode root, int v){
  10. if(root == null) return true;
  11. boolean left = helper(root.left, root.val);
  12. boolean right = helper(root.right, root.val);
  13. if(left && right){
  14. count++;
  15. return root.val == v;
  16. }
  17. return false;
  18. }
  19. }

366. Find Leaves of Binary Tree

一层一层剥离当前树的所有叶子节点。叶子节点高度设为0,所以 res.size( )的大小 == 当前层数 + 1。

每一个节点从左子节点和右子节点分开走可以得到两个深度,由于成为叶节点的条件是左右子节点都为空,所以我们取左右子节点中较大值加1为当前节点的深度值,知道了深度值就可以将节点值加入到结果res中的正确位置了。加入root.val时要remove该叶子节点 root = null。

  1. class Solution {
  2. public List<List<Integer>> findLeaves(TreeNode root) {
  3. List<List<Integer>> res = new ArrayList<>();
  4. height(root, res);
  5. return res;
  6. }
  7.  
  8. private int height(TreeNode root, List<List<Integer>> res){
  9. if(root == null) return -1;
  10. int level = Math.max(height(root.left, res), height(root.right, res)) + 1;
  11. if(res.size() < level + 1){
  12. res.add(new ArrayList<>());
  13. }
  14. res.get(level).add(root.val);
  15. root = null;
  16. return level;
  17. }
  18. }

199. Binary Tree Right Side View

求每一层最右边的节点

先序遍历中序遍历后序遍历都可,只要保证右侧节点的添加在左侧添加之后。

每当开始新一层节点的遍历之前,先把新一层最后一个节点值存到结果中

  1. class Solution {
  2. public List<Integer> rightSideView(TreeNode root) {
  3. List<Integer> res = new ArrayList<>();
  4. HashMap<Integer, Integer> map = new HashMap<>();
  5.  
  6. int depth = 1;
  7. dfs(root, depth, map);
  8. //map --> List<Integer> list
  9. depth = 1;
  10. while(map.containsKey(depth)){
  11. res.add(map.get(depth));
  12. depth++;
  13. }
  14. return res;
  15. }
  16.  
  17. private void dfs(TreeNode root, int depth, Map<Integer, Integer> map){
  18. //Exit
  19. if(root == null) return;
  20.  
  21. //traverse
  22. map.put(depth, root.val); // do not have to be preorder
  23. dfs(root.left, depth + 1, map);
  24. dfs(root.right, depth + 1, map);
  25. }
  26. }

98. Validate Binary Search Tree

测试用例中可能有超过Integer.MAX_VALUE的值。故用Long.MAX_VALUE

  1. class Solution {
  2. public boolean isValidBST(TreeNode root) {
  3. if(root == null) return true;
  4. return valid(root, Long.MIN_VALUE, Long.MAX_VALUE);
  5. }
  6.  
  7. private boolean valid(TreeNode root, long low, long high){
  8. if(root == null) return true;
  9. if(root.val <= low || root.val >= high) return false;
  10. return valid(root.left, low, Math.min(root.val, high)) && valid(root.right, Math.max(low, root.val), high);
  11. }
  12. }

<Tree> 298 250 366 199(高频) 98(高频)的更多相关文章

  1. 用 R 进行高频金融数据分析简介

    作者:李洪成 摘自:http://cos.name/wp-content/uploads/2013/11/ChinaR2013SH_Nov03_04_LiHongcheng.pdf 高频数据 金融市场 ...

  2. 高频交易[z]

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:袁浩瀚链接:https://www.zhihu.com/question/21789812/answer/22178178来源 ...

  3. Java才是世界上最好的语言,Java在高频交易中替代C++

    高频交易 高频交易是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易,比如,某种证券买入价和卖出价差价的微小变化,或者某只股票在不同交易所之间的微小价差.在高频交易中,自动化应用程序每 ...

  4. Leetcode重点 250题-前400 题

    删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于简单题目(例:100题:Same Tree) 删除题意不同,代码基本相同题目(例:136 & ...

  5. LeetCode All in One题解汇总(持续更新中...)

    突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...

  6. Fast Matrix Operations(UVA)11992

    UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...

  7. poj 1018 Communication System

    点击打开链接 Communication System Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21007   Acc ...

  8. SVG:中国地图

    中国地图 <svg height="578" version="1.1" width="718" xmlns="http:/ ...

  9. AWR Report 关键参数详细分析

    WORKLOAD REPOSITORY report for DB Name DB Id Instance Inst num Startup Time Release RAC CALLDB 12510 ...

随机推荐

  1. Apriori关联分析详解

    ------------恢复内容开始------------ 一. Apriori关联分析概述 选择物品之间的关联规则也就是要找出物品之间的关系,要找到这种关系有两步 找出频繁一起出现的物品集的集合, ...

  2. IDEA创建maven项目慢的不行

    方法二 下载archetype-catalog.xml文件,在maven的VM Options加上-DarchetypeCatalog=local 默认情况下,创建maven项目是从网络下载catal ...

  3. 第04组 Alpha冲刺(4/4)

    队名:斗地组 组长博客:地址 作业博客:Alpha冲刺(4/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.分配展示任务 2.收集各个组员的进度 3.写博客 展示GitHub当日代码/文 ...

  4. something just like this---About Me

    endl:JX弱校oier,04年生,妹子,2019级高一新生,然后居然不知道该说什么了,尴尬 2019年3月开始接触oi,学的很慢(看起来脑子不太好用) 2019年7月创建了这个博客,在收到“恭喜! ...

  5. 开放平台API接口安全策略汇总

    在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,本文对接口加密及签名的相关知识做了一个总结,在方便自己查阅的同时也分享给大家做一些参考. 接口安全性问题思考 接口安全性问题主要来源于几方 ...

  6. ASP.NET Core 获取主机名时的 "Decoded string is not a valid IDN name" 错误

    在 ASP.NET Core 中通过 Request.Host.Host 获取主机名(hostname)时,如果主机名中包含非 ASCII 字符(比如 puny code),就会引发下面的异常: Sy ...

  7. python接口自动化11-pytest入门

    前言 pytest是一个非常成熟的全功能的Python测试框架,适合从简单的单元到复杂的功能测试,主要特点有以下几点: 简单灵活,容易上手: 支持参数化: 能够支持简单的单元测试: 标记测试功能与属性 ...

  8. Ansible-Tower自动化运维管理环境 - 安装破解记录

    公司中实现运维自动化的架构中主要用到ansible,ansible脚本在部署服务器指令行中显得不太直观.Ansible-Tower(之前叫做awx)是将ansible的指令界面化,简明直观,简单易用. ...

  9. PHPexcel导入数据的时候出现object解决方法

    打印其他数据都是正常的,就这个是一个对象 从表格里面看不出问题 后面找到原因是表格里那个名字  李珊珊  周围有空白字符,去掉之后就能正常导入,         解决方法:   找到导入文件的那个方法 ...

  10. 一次业务网关用ASP.NET Core 2.1重构的小结

    目录 前言 统一鉴权 服务限流 路由转发 参数重组 链路跟踪 熔断降级 服务计次 业务指标监控 日志记录 迭代更新 总结 前言 对于API网关,业界貌似对它进行下划分,有下面几个分类/场景. 面向We ...