如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
- 二叉树根节点所在层下标为
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) {
if(!root || root->val%2 == 0) return false;
queue<TreeNode*>q;
q.push(root);
int level = 1;
int cnt = 1;
int levelNum = 0;
int lastVal = 0;
while(!q.empty()){
TreeNode* tmp = q.front();
if(tmp->val%2 != cnt%2) return false;
q.pop();
level--;
if(tmp->left){
q.push(tmp->left);
levelNum++;
}
if(tmp->right){
q.push(tmp->right);
levelNum++;
}
if(lastVal && cnt%2 && tmp->val <= lastVal) return false;
if(lastVal && cnt%2 == 0 && tmp->val >= lastVal) return false;
lastVal = tmp->val;
if(!level){
level = levelNum;
levelNum = 0;
cnt++;
lastVal = 0;
}
}
return true;
}
};