作者:小卢

专栏:《Leetcode》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》


1609. 奇偶树

1609. 奇偶树

题目描述:

如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :

二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。

示例:

思路:

奇偶树:就当层数level为奇数,节点递减,当层数level为偶数,节点递增

很明显本题需要用到层序遍历。

判断一棵二叉树是否为奇偶树,需要考虑两个条件,一是节点值的奇偶性,二是节点值的单调性,这两个条件都由层下标的奇偶性决定。因此,需要维护搜索到的层下标,以及对于每一层搜索都需要维护上一个节点值。

如果当前层下标是偶数,则要求当前层的所有节点的值都是奇数,且节点值从左到右严格递增。如果遇到节点值是偶数,或者当前节点值小于等于上一个节点值,则二叉树一定不是奇偶树。

如果当前层下标是奇数,则要求当前层的所有节点的值都是偶数,且节点值从左到右严格递减。如果遇到节点值是奇数,或者当前节点值大于等于上一个节点值,则二叉树一定不是奇偶树。

如果二叉树的所有节点都满足奇偶树的条件,则二叉树是奇偶树。

更详细的可以看看注释,我写很详细!!!

代码:

bool isEvenOddTree(struct TreeNode* root) {//Queue为队列//level为层数//head为二叉树的遍历位置//tail为队列的遍历位置struct TreeNode* Queue[100010];int level = 0;int head = 0;int tail = 0;Queue[head++] = root;while (tail < head)//当队列的位置tail大于二叉树的位置head遍历完成{//front为每次出队列的元素//size为队列的有效长度int size = head - tail;//prev为上一个节点的val//INT_MAX为int类型的最大值,INT_MIN为int类型的最小值//奇偶树:当level为奇数,节点是递减的,所以第一个节点要大于第二个节点//而在层序遍历中,最左边的节点一定是小于INT_MAX//同理可得,当leve为偶数,最左边的节点大于INT_MINint prev = level % 2 == 0 ? INT_MIN : INT_MAX;for (int i = 0; i < size; i++){struct TreeNode* front = Queue[tail++];if (level % 2 == (front->val) % 2)//level为奇数,节点为偶数,level为偶数,节点为奇数return false;if ((level % 2 == 0 && prev >= front->val) || (level % 2 == 1 && prev <= front->val))return false;//当level为奇数,节点是递减的,当level为偶数,节点是递增的prev = front->val;if (front->left)Queue[head++] = front->left;if (front->right)Queue[head++] = front->right;}level++;}return true;
}//LeetCode1609

1122. 数组的相对排序

1122. 数组的相对排序

题目描述:

给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。

对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

示例:

代码:

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* relativeSortArray(int* arr1, int arr1Size, int* arr2, int arr2Size, int* returnSize) {int upper = 0;for (int i = 0; i < arr1Size; i++) {upper = fmax(upper, arr1[i]);}int frequency[upper + 1];memset(frequency, 0, sizeof(frequency));for (int i = 0; i < arr1Size; i++) {frequency[arr1[i]]++;}int* ans = malloc(sizeof(int) * arr1Size);*returnSize = 0;for (int i = 0; i < arr2Size; i++) {int x = arr2[i];for (int j = 0; j < frequency[x]; j++) {ans[(*returnSize)++] = x;}frequency[x] = 0;}for (int x = 0; x <= upper; x++) {for (int i = 0; i < frequency[x]; i++) {ans[(*returnSize)++] = x;}}return ans;
}

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

  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.奇偶树

    大佬,牛!!! 题目:给定一颗二叉树,其中层数从0开始,然后如果满足两个条件,就称为奇偶树,则返回true 奇数层,所有节点必须是偶数,并且严格递减: 偶数层,所有节点必须是奇数,并且严格递增. 思路 ...

  6. LeetCode 1609 奇偶树

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

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

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

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

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

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

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

最新文章

  1. 如果《赛博朋克2077》走进现实,人类如何摆脱AI的支配?
  2. Transact_SQL
  3. 浅谈 Linux 内核开发之网络设备驱动
  4. ADAS越来越热,这家公司为何能俾睨群雄
  5. hdu1247(Hat’s Words)
  6. 《天天数学》连载24:一月二十四日
  7. Maven仓库的理解及配置
  8. Atitit 同步获取阻塞式命令行输出 费阻塞式样命令行执行完毕后退出了,可以直接获取其输出 InputStream is = new StreamGobbler(session.getStd
  9. Git——基本思想和工作原理(二)
  10. java语言程序设计第三版沈泽刚课后答案_Java语言程序设计(第3版)学习指导与习题解析...
  11. URL和URI的区别及理解
  12. staruml-uml程序员绘图工具简单使用与说明
  13. 百度云盘MP3音乐外链、视频外链教程
  14. 未来IT人才市场最热门的12项技能
  15. 记canvas优化图片抠图历程
  16. crontab 调度程序按时执行
  17. 使用Okhttp调用聚合API
  18. Zygote启动及其作用
  19. 抖音短视频怎样引流?有哪些方法?
  20. 用python的turtle模块给女票画个小心心

热门文章

  1. **./** 和 **sh**的使用区别
  2. android camera2 连拍,Android自定义Camera2 拍照,用SurfaceView预览
  3. 如何处理投递的邮件被趋势RBL拦截的问题
  4. OpenGL - Anti Aliasing
  5. 程序猿接单必看的四个平台!!!
  6. face - Cross-lingual Language Model Pretraining ---- XLM
  7. 【CIPS 2016】(16章)语音技术 (研究进展、现状趋势)
  8. 博通wifi驱动详解(一)
  9. 线程和进程的区别和联系
  10. ROC曲线与AUC指标理解