淼淼刷力扣

【努力刷力扣】第四十六天 --- 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是树上节点的个数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JLU_LYM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值