【努力刷力扣】第四十六天 --- 1609. 奇偶树
前言
本人初次尝试写博客,希望各位看官大佬多多包容
有错误希望巨巨们提出来,我一定会及时改正,谢谢大家
在自己最好的年纪,找到了未来的目标
还有1年奋斗刷题,明年去面试实习,加油!
题目要求:
整体思路
1、这道题是典型的BFS,我们通过对每一层的遍历,遍历的时候对该层的节点进行判断即可
2、这里遍历的时候,一定一层一层的遍历,不要一个点一个点的遍历
3、Sum Up:这道题本质上就是BFS多了一些判断限制条件而已。
具体代码(内附注释)
注:写法就是套用BFS(一层一层遍历)的模型即可
class Solution {
public:
bool isEvenOddTree(TreeNode* root) {
queue<TreeNode*> item;//辅助队列
item.push(root);
int num1 = 1;//每层的节点数
int grade = 0;//表示层数
while (!item.empty()) {
int temp_num = 0;
//pre是前驱节点,用来判断严格递增或者递减
int pre = 1 << 30;//初始化,这个值是判断严格递减序列用的
if (grade % 2 == 0) {
pre = 0;//初始化,这个值是判断严格递增序列用的
}
for (int i = 0; i < num1; i++) {//这块就是连续把一层的节点访问了,再把下一层节点放进去
TreeNode* temp = item.front();
item.pop();
if (grade % 2 == 0 && (temp->val % 2 == 0 || temp->val <= pre)) {
return false;//根据题意进行判断,不满足就一定不是奇偶树
}
if (grade % 2 != 0 && (temp->val % 2 != 0 || temp->val >= pre)) {
return false;//根据题意进行判断,不满足就一定不是奇偶树
}
if (temp->left != nullptr) {//放入下一层节点,当有的时候再放进去
temp_num++;
item.push(temp->left);
}
if (temp->right != nullptr) {//放入下一层节点,当有的时候再放进去
temp_num++;
item.push(temp->right);
}
pre = temp->val;//更新前驱节点
}
num1 = temp_num;//更新当前层节点个数
grade++;//级数++
}
return true;//一系列判断了都满足要求,则是奇偶树
}
};
(所有代码均已在力扣上运行无误)
经测试,该代码运行情况是(经过多次测试所得最短时间):
时间复杂度:O(N),N是树上节点的个数。