leetcode每日一题1609. 奇偶树 圣诞节你做奇偶数了没 BFS套模板一遍过
本文目录
- leetcode每日一题1609. 奇偶树 圣诞节你做奇偶数了没 BFS套模板一遍过~
- 写在前面
- 题目
- 示例
- 提示
- 思路
- 代码实现
- 执行结果
- 写在最后
leetcode每日一题1609. 奇偶树 圣诞节你做奇偶数了没 BFS套模板一遍过~
写在前面
平安夜,挺平静的,只不过小付太过无聊了,但是就是睡不着,所幸就来刷题了,本来周六是休息的一天好不好,不过既然大家都没睡~那我也不好意思睡觉了,就来有了这篇圣诞节特别篇,其实也没啥特别的,毕竟咱们不推荐过洋节…
题目
- 奇偶树
如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
二叉树根节点所在层下标为 0 ,根的子节点所在层下标为
1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
示例
示例1:
输入:root = [1,10,4,3,null,7,9,12,8,6,null,null,2]
输出:true
解释:每一层的节点值分别是:
0 层:[1]
1 层:[10,4]
2 层:[3,7,9]
3 层:[12,8,6,2]
由于 0 层和 2 层上的节点值都是奇数且严格递增,而 1 层和 3 层上的节点值都是偶数且严格递减,因此这是一棵奇偶树。
示例2:
输入:root = [5,4,2,3,3,7]
输出:false
解释:每一层的节点值分别是:
0 层:[5]
1 层:[4,2]
2 层:[3,3,7]
2 层上的节点值不满足严格递增的条件,所以这不是一棵奇偶树。
示例3:
输入:root = [5,9,1,3,5,7]
输出:false
解释:1 层上的节点值应为偶数。
提示
树中节点数在范围 [1, 10^5] 内
1 <= Node.val <= 10^6
思路
//你只需要记住所有的BFS的题都能依靠模板来完成public void traverse(TreeNode root){if (root == null) return ;//初始化队列,将root加入队列中Queue<TreeNode> q = new ArrayDeque<>();q.offer(root);while (!q.isEmpty()){TreeNode cur = q.poll();/*层级遍历代码的位置*/System.out.println(root.val);/******************/if(cur.left!= null){q.offer(cur.left);}if(cur.right!= null){q.offer(cur.right);}}}
上述代码是标准的二叉树层级遍历框架,从上到下,由左到右打印每一层二叉树节点的值,到了这里你在看这道题,是不是简单了很多,唯一增加的区别就在于当前这一层是奇数层还是偶数层用一个even变量来记录,随后偶数层是否是依次递减,奇数层是否依次递增,当此层判定完成后,变量even取反即为odd层,如果条件都满足,这无疑是一颗奇偶树。
代码实现
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public boolean isEvenOddTree(TreeNode root) {boolean even = true;Deque<TreeNode> q = new ArrayDeque<>();q.offerLast(root);while (!q.isEmpty()){int pre = even ? 0 : 1000000;for (int i = 0 ,n=q.size();i< n;i++){TreeNode node = q.pollFirst();if (even && (pre >= node.val || node.val %2 == 0)){return false;}if (!even && (pre <= node.val || node.val % 2 == 1)){return false;}pre = node.val;if (node.left!= null){q.offerLast(node.left);}if (node.right != null){q.offerLast(node.right);}}even = !even;}return true;}
}
执行结果
写在最后
接近双百 真不错 圣诞节的特殊篇就到这里了哦
可以安心睡个好觉了 今日提前打卡成功~
明天的话适度卷一下,因为要陪重要的人一起过玩~
emmm,虽然最近很忙但是小付还是会努力更新出最近所学的一门基础知识——这里先卖个关子 从下周开始哦~
最后
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~
leetcode每日一题1609. 奇偶树 圣诞节你做奇偶数了没 BFS套模板一遍过相关推荐
- leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树
leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...
- Leetcode每日一题——思路小记
文章目录 LeetCode每日一题 golang T15 2020.6.12 三数之和,双指针的运用 T70 2020.6.13 斐波那契数列 T1014 2020.6.17 最佳观光:双指针,计算公 ...
- LeetCode每日一题——904. 水果成篮
LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...
- LeetCode每日一题(题1028)
题1028 前言 题目 思路 代码 错误 后记 前言 最近在刷LeetCode每日一题,每次做完之后总能有些收获,所以想着不如每天写个博客记录一下做的题目的解法以及自己写的时候问题出在哪里. 题目 从 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
最新文章
- pytorch nn.Embedding
- Linux系统编程@文件操作(一)
- 进阶学习(1) Gradle 项目管理工具的使用
- Redux学习(2) ----- 异步和中间件
- 【赠送】IT技术视频教程,白拿不谢!思科、华为、红帽、数据库、云计算等等
- 深度学习 500 问!一份火爆 GitHub 的面试手册
- Linux QoS ingress处理流程
- 网管心得:优化网络性能给局域网提速[好文章]
- 谈谈怎样提高炼丹手速
- 删除密码设置对象(PSO)
- gson下载java_gson.jar
- 大学生mysql实训心得_大学生实训心得与收获
- SaaSpace:11个免费建筑信息建模软件工具
- Office2016软件安装教程
- matlab对图片裁剪处理
- 什么平台制作表单工具效率高?
- C++ —— (两个经纬度计算距离、方位角)、(经纬度A+距离+方位,计算目标经纬度)、(多个经纬度计算面积)
- 06数据分析 - 预测性分析
- Python程序设计基础第七章笔记:字符串
- Reinforcement Learning for Non-Stationary Markov Decision Processes: The Blessing of (More) Optimism