⭐️ 题目描述
🌟 leetcode链接:奇偶树
思路:
树的层序遍历,用队列辅助。用一个变量记录当前是多少层,以及当前层的节点个数,依次遍历,因为需要判断当前层是否严格递增或递减,如果正着依次判断不太好判断,所以我们判断当条件为假的时候直接返回 false
即可。层序遍历结束都没有返回 false
那说明是奇偶树返回 true
。
代码:
class Solution {
public:
bool isEvenOddTree(TreeNode* root) {
int level = 0; // 记录当前是第几层
// 层序遍历
queue<TreeNode*> q; // 树节点队列
q.push(root); // 根节点入队列
while (!q.empty()) { // 队列不为空继续
int cur_level_count = q.size(); // 当前这层的节点个数
int prev_val = level % 2 == 1 ? INT_MAX : INT_MIN; // 当前层的前驱节点值
for (int i = 0; i < cur_level_count; i++) { // 遍历当前层
TreeNode* node = q.front();
// 当前是奇数层 都是偶数 严格递减 node->val < prev_val
if ((level % 2 == 1) && ((node->val % 2 != 0) || (node->val >= prev_val))) { // 不是严格递增直接返回false
return false;
}
// 当前是偶数层 都是奇数 严格递增 node->val > prev_val
if ((level % 2 == 0) && ((node->val % 2 != 1) || (node->val <= prev_val))) {
return false;
}
// 更新
prev_val = node->val;
if (node->left) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
q.pop();
}
level++; // 下一层
}
return true;
}
};