--------------------------------------------纯刷题笔记,不是自己的解题思路-------------------------------------
、题目描述:
如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
解答:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isEvenOddTree(TreeNode* root) {
// 广度优先遍历 这道题目广度优先搜索也确实比较合适 可以和当前的层级匹配
queue<TreeNode*> qu;
qu.push(root);
int level = 0;
while (!qu.empty()) {
int size = qu.size();
// cout<<size<<endl;
int prev = level % 2 == 0 ? INT_MIN : INT_MAX;
for (int i = 0; i < size; i++) {
//返回第一个元素
TreeNode * node = qu.front();
//弹出第一个元素
qu.pop();
cout<< i <<endl;
int value = node->val;
if (level % 2 == value % 2) {
return false;
}
if ((level % 2 == 0 && value <= prev) || (level % 2 == 1 && value >= prev)) {
return false;
}
prev = value;
if (node->left != nullptr) {
// 当前层级广度遍历
qu.push(node->left);
}
if (node->right != nullptr) {
qu.push(node->right);
}
}
level++;
}
return true;
}
};