当前位置:网站首页>每日一题:奇偶树
每日一题:奇偶树
2022-07-27 02:50:00 【利刃Cc】
1609. 奇偶树
难度中等80
如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
- 二叉树根节点所在层下标为
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 层上的节点值应为偶数。
示例 4:
输入:root = [1]
输出:true
示例 5:
输入:root = [11,8,6,1,3,9,11,30,20,18,16,12,10,4,2,17]
输出:true
提示:
- 树中节点数在范围
[1, 105]内 1 <= Node.val <= 106
思路:广度优先遍历
由于判断一棵二叉树是否为奇偶树的条件是针对同一层的节点,因此可以使用广度优先遍历的方法,每一轮遍历访问同一层的全部节点,且只会访问这一层的节点。
使用 队列(queue)存储节点。初始时,将根节点加入队列。每一轮搜索之前,队列中的节点是同一层的全部节点,记队列的大小为size,该轮遍历只访问 size 个节点,即可保证该轮遍历访问的恰好是同一层的全部节点。遍历过程中,将当前层的节点的非空子节点依次加入队列,用于下一层的遍历。
判断一棵二叉树是否为奇偶树,需要考虑两个条件,一是节点值的奇偶性,二是节点值的单调性,这两个条件都由层下标的奇偶性决定。因此,需要维护搜索到的层下标,以及对于每一层搜索都需要维护上一个节点值。
- 如果当前层下标是偶数,则要求当前层的所有节点的值都是奇数,且节点值从左到右严格递增。如果遇到节点值是偶数,或者当前节点值小于等于上一个节点值,则二叉树一定不是奇偶树。
- 如果当前层下标是奇数,则要求当前层的所有节点的值都是偶数,且节点值从左到右严格递减。如果遇到节点值是奇数,或者当前节点值大于等于上一个节点值,则二叉树一定不是奇偶树。
如果二叉树的所有节点都满足奇偶树的条件,则二叉树是奇偶树。
注:该解释大体是从力扣官方解释中修改过的,因为官方解释的很全面,目前本人不知道怎么解释会比官方解释的更好,所以就摘录了这篇解释,出处如下:
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/even-odd-tree/solution/qi-ou-shu-by-leetcode-solution-l7bw/
来源:力扣(LeetCode)
class Solution {
public:
bool isEvenOddTree(TreeNode* root) {
queue<TreeNode*> dq; //定义一个空的队列
dq.push(root);
int level = 0; //表示层数
while(!dq.empty())
{
//用于记录某一层的节点个数
int size = dq.size();
//用来记录同一层上一个节点,但为了防止溢出,我们将其设为int的最值
int prev = level % 2 == 0 ? INT_MIN : INT_MAX;
for(int i = 0; i < size; ++i)
{
TreeNode* tmp = dq.front();
dq.pop();
//判断偶数(奇数)层是否为奇数(偶数)
if(level % 2 == tmp->val % 2)
return false;
//判断偶数层(奇数层)是否每一个节点都严格递增(递减)
if(level % 2 == 0 && tmp->val <= prev)
return false;
if(level % 2 == 1 && tmp->val >= prev)
return false;
//记得将tmp->val作为上一个节点的值赋给prev
prev = tmp->val;
if(tmp->left != nullptr)
dq.push(tmp->left);
if(tmp->right != nullptr)
dq.push(tmp->right);
}
level++;
}
return true;
}
};
复杂度分析:
时间复杂度:O(n),其中 n 是二叉树的节点数。广度优先遍历会对每个节点访问一次。
空间复杂度:O(n),其中 n 是二叉树的节点数。空间复杂度主要取决于队列的开销,队列中的元素个数不会超过 n
边栏推荐
- 次轮Okaleido Tiger即将登录Binance NFT,引发社区热议
- Okaleido tiger is about to log in to binance NFT in the second round, which has aroused heated discussion in the community
- Want to get the Apache official domain name mailbox? Exclusive interview with Apache linkis five new committers to tell you how to do it
- VR全景制作在家装行业是谈单利器?这是为什么呢?
- Specific use of multithreading
- Threads and processes
- Regression testing: meaning, challenges, best practices and tools
- The fifth strong network cup national network security challenge Title reappearance (with title attachment, detailed explanation)
- JMeter interface test (login, registration)
- Alibaba cloud server domain name and port web page cannot access the problem record
猜你喜欢

Framework学习之旅:init 进程启动过程

电商系统结合商品秒杀活动,VR全景不断带来收益

Chapter 4 决策树和随机森林

Summer meal | rich people are different from what you think (day 5) + power system power flow simulation (documents and matlab code)
![Article main content extraction software [based on NLP technology]](/img/1c/7c1b0e9bc9af62308f4124104f6110.png)
Article main content extraction software [based on NLP technology]

暑假加餐|有钱人和你想的不一样(第5天)+电力系统潮流仿真(文档和Matlab代码)

C语言学习笔记 —— 内存管理

Golang发送邮件库email

VR全景人淘金“小心机”(上)

First pass of routing strategy
随机推荐
B. ICPC Balloons
[untitled]
基于风能转换系统的非线性优化跟踪控制(Matlab代码实现)
Development of NFT digital collection system: Xiaoyi digital intelligence helps brands launch NFT with one click on the chain
Day 27 of leetcode
Analyze CAS written by CSDN boss, re-entry lock, unfair lock
[OBS] dynamic bit rate: bit rate estimation
Maximum subarray cumulative sum less than or equal to K
0726~ resume sorting interview summary
Okaleido tiger is about to log in to binance NFT in the second round, which has aroused heated discussion in the community
利用LCD1602显示超声波测距
JS array de duplication (including simple array de duplication and object array de duplication)
leetcode:433. 最小基因变化
PSINS工具箱中轨迹生成工具详细解析
Alibaba cloud server domain name and port web page cannot access the problem record
A. Round Down the Price
三种常见的移动底盘运动学模型分析
Apachecon Asia preheating live broadcast incubator theme full review
jmeter接口测试(登录、注册)
Chapter 5 决策树和随机森林实践