⭐️ 题目描述
🌟 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_valif ((level % 2 == 1) && ((node->val % 2 != 0) || (node->val >= prev_val))) { // 不是严格递增直接返回falsereturn false;}// 当前是偶数层 都是奇数 严格递增 node->val > prev_valif ((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;}
};