LeetCode——1609.奇偶树
大佬,牛!!!
- 题目:给定一颗二叉树,其中层数从0开始,然后如果满足两个条件,就称为奇偶树,则返回true
- 奇数层,所有节点必须是偶数,并且严格递减;
- 偶数层,所有节点必须是奇数,并且严格递增。
- 思路:
- 我的思路:首先,这就是二叉树的层序遍历,可以用队列的。然后就是判断这是那一层,以及节点的判断。但是光判断那一层,我就想了好久,思路一直不稳定,写的代码也是乱糟糟的。其次,就是判断递减这一块。并且里面还穿插着null,一时不知道如何下手。
- 大佬的思路总结:我们可以这样,每次再队列中处理一层,直到队列为空。那么如何处理一层,就是比较关键的问题。
- 我们每次开始处理的时候,这一层应该都已经在这个队列中了(最开始直接扔进去root),然后我们就for循环这个队列的长度就可以了,注意这里一定要用fori循环,并且长度是最开始就给定一个变量。然后每一个i我们都扔掉对头元素,知道遍历玩这一层的。并且在这次遍历中,我们还需要将下一层的扔如队列,这样只要还有元素,队列就不为空。这就是我们为什么需要先定义队列的长度。
- 然后我们就是判断就可以了。还需要记录一下前一个元素(注意这里在最开始这一层的时候需要进行初始化的)。
- 技巧:
- 这里有一个很大的技巧,就是fori循环,遍历动态集合,但是通过提前定义size,使得我们可以很方便的对一些东西进行区分。例如,这里可以对层数进行区分。
伪代码
首先判断如果root的val是奇数,直接return false即可。
定义队列treeNodes
添加根节点
定义层数level=第0层
定义前一个节点pre
while循环,条件是队列不等于空定义一个变量,来记录是奇数还是偶数如果是偶数,那么初始化pre=1000002否则为奇数,初始化pre=-1定义size,为队列大小,这里跟关键,这个就是表示这一层有多少个元素fori循环遍历出队判断是奇数层还是偶数层判断满足的条件:当前节点应该是奇数还是偶数,与前一个是递增还是递减左右子节点只要不是空就入队,也就是填充下一层层数++
java代码
class Solution {public boolean isEvenOddTree(TreeNode root) {// 层序遍历树,需要用到队列if (root.val % 2 == 0) return false;LinkedList<TreeNode> treeNodes = new LinkedList<TreeNode>();treeNodes.add(root);int level = 0;// 层数int pre = 0;// 记录每一层前一个节点的值while (!treeNodes.isEmpty()) {int extra = (level % 2) ^ 1;// 这个是奇数还是偶数的余数if (extra == 0) pre = 1000002;// 偶数,取偶数的最大值,因为val不会超过else pre = -1;// 奇数,取奇数的最小值,因为val不会超过int size = treeNodes.size();// 这一层有多少个节点// 接下来遍历这个list中的内容,因为我们还需要往这个list中加,所以这里只能使用forifor (int i = 0; i < size; i++) {// 这个for会遍历一层,然后加入下一层TreeNode cur = treeNodes.poll();if (level % 2 == 0)// 偶数层,递增if (cur.val % 2 != extra || cur.val <= pre) return false;else pre = cur.val;// 更新else {if (cur.val % 2 != extra || cur.val >= pre) return false;else pre = cur.val;}if (cur.left != null) treeNodes.add(cur.left);if (cur.right != null) treeNodes.add(cur.right);}level++;}return true;}
}
- 总结:题目相对复杂,主要是思路理清楚,然后这里一个很重要的技巧就是fori循环的size的使用。我已经见过两次了,上一次是1610题。附上大佬链接。
LeetCode——1609.奇偶树相关推荐
- 【Leetcode -1609.奇偶树 -1122.数组的相对排序】
Leetcode Leetcode -1609.奇偶树 Leetcode -1122.数组的相对排序 Leetcode -1609.奇偶树 题目:如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : ...
- leetcode *1609. 奇偶树(周赛209)
[题目]*1609. 奇偶树 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推. 偶数下标 ...
- LeetCode 1609 奇偶树(BFS)
1609. 奇偶树https://leetcode-cn.com/problems/even-odd-tree/ 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ...
- LeetCode 1609. 奇偶树(层序遍历)
文章目录 1. 题目 2. 解题 1. 题目 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类 ...
- LeetCode 1609 奇偶树
分析 层次遍历,思路比较简单,注意细节即可 代码 class Solution {public:bool isEvenOddTree(TreeNode* root) {queue<TreeNod ...
- leetcode每日一题1609. 奇偶树 圣诞节你做奇偶数了没 BFS套模板一遍过
本文目录 leetcode每日一题1609. 奇偶树 圣诞节你做奇偶数了没 BFS套模板一遍过~ 写在前面 题目 示例 提示 思路 代码实现 执行结果 写在最后 leetcode每日一题1609. 奇 ...
- 【LeetCode】1609. 奇偶树、1122. 数组的相对排序
作者:小卢 专栏:<Leetcode> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽. --<人民日报> 16 ...
- 模拟卷Leetcode【普通】1609. 奇偶树
1609. 奇偶树 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推. 偶数下标 层上的所有 ...
- 1609. 奇偶树-层次遍历-力扣双百代码
1609. 奇偶树-层次遍历-力扣双百代码 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推 ...
最新文章
- 使用 bcp 指定数据文件中的前缀长度
- Spring学习篇:IoC知识整理(一)
- 使用java搭建直播平台,我就不信你还听不明白了!
- 如何复制一个含有随机指针节点的链表
- svn patch 功能
- JDBC实现从Hive抽取数据导入Oracle
- 102.二叉树的层序遍历
- 项目复盘:从0到1,如何做好竞品分析?
- 华为交换机模拟器_从零开始学习华为路由交换 | 配置缺省静态路由
- ORB_SLAM2中的疑难杂症
- VirtualBox Failed to open/create the internal network 错误处理
- HikariCP 的Java数据库连接池介绍及配置
- W3Cschoool菜鸟教程
- 使用STN的行人属性识别
- SQL查找每科最高分和人
- 华东师范大学计算机考研资料汇总
- 数据错误循环冗余检查是什么意思_磁盘阵列是什么,用在什么地方,有什么优点...
- 做软件工程师需要具备怎样的能力和素质
- 品味kettle--(一)用eclipse 搭建源码
- Aveva.Bocad.v2.1-ISO 1DVD(钢结构详图设计软件)