大佬,牛!!!

  • 题目:给定一颗二叉树,其中层数从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.奇偶树相关推荐

  1. 【Leetcode -1609.奇偶树 -1122.数组的相对排序】

    Leetcode Leetcode -1609.奇偶树 Leetcode -1122.数组的相对排序 Leetcode -1609.奇偶树 题目:如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : ...

  2. leetcode *1609. 奇偶树(周赛209)

    [题目]*1609. 奇偶树 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推. 偶数下标 ...

  3. LeetCode 1609 奇偶树(BFS)

    1609. 奇偶树https://leetcode-cn.com/problems/even-odd-tree/ 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ...

  4. LeetCode 1609. 奇偶树(层序遍历)

    文章目录 1. 题目 2. 解题 1. 题目 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类 ...

  5. LeetCode 1609 奇偶树

    分析 层次遍历,思路比较简单,注意细节即可 代码 class Solution {public:bool isEvenOddTree(TreeNode* root) {queue<TreeNod ...

  6. leetcode每日一题1609. 奇偶树 圣诞节你做奇偶数了没 BFS套模板一遍过

    本文目录 leetcode每日一题1609. 奇偶树 圣诞节你做奇偶数了没 BFS套模板一遍过~ 写在前面 题目 示例 提示 思路 代码实现 执行结果 写在最后 leetcode每日一题1609. 奇 ...

  7. 【LeetCode】1609. 奇偶树、1122. 数组的相对排序

    作者:小卢 专栏:<Leetcode> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽.                                  --<人民日报> 16 ...

  8. 模拟卷Leetcode【普通】1609. 奇偶树

    1609. 奇偶树 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推. 偶数下标 层上的所有 ...

  9. 1609. 奇偶树-层次遍历-力扣双百代码

    1609. 奇偶树-层次遍历-力扣双百代码 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推 ...

最新文章

  1. 使用 bcp 指定数据文件中的前缀长度
  2. Spring学习篇:IoC知识整理(一)
  3. 使用java搭建直播平台,我就不信你还听不明白了!
  4. 如何复制一个含有随机指针节点的链表
  5. svn patch 功能
  6. JDBC实现从Hive抽取数据导入Oracle
  7. 102.二叉树的层序遍历
  8. 项目复盘:从0到1,如何做好竞品分析?
  9. 华为交换机模拟器_从零开始学习华为路由交换 | 配置缺省静态路由
  10. ORB_SLAM2中的疑难杂症
  11. VirtualBox Failed to open/create the internal network 错误处理
  12. HikariCP 的Java数据库连接池介绍及配置
  13. W3Cschoool菜鸟教程
  14. 使用STN的行人属性识别
  15. SQL查找每科最高分和人
  16. 华东师范大学计算机考研资料汇总
  17. 数据错误循环冗余检查是什么意思_磁盘阵列是什么,用在什么地方,有什么优点...
  18. 做软件工程师需要具备怎样的能力和素质
  19. 品味kettle--(一)用eclipse 搭建源码
  20. Aveva.Bocad.v2.1-ISO 1DVD(钢结构详图设计软件)

热门文章

  1. 高德地图 JS Web 添加自定义图标,自定义窗口标记
  2. ContentProvider简要说明
  3. 全球与中国止血剂市场深度研究分析报告(2022)
  4. VxWorks中的任务间通信(信号量、共享内存、消息队列、管道、信号、事件、套接字socket)
  5. 深度挖掘文物价值,VR博物馆讲好文物故事
  6. DirectSound学习1
  7. (毕业设计资料)基于51单片机脉搏心率智能检测测速系统设计
  8. 劳易测BCL 348i SF 102条码阅读器
  9. Games 101 shading part 03 纹理
  10. UCOSII信号量和邮箱