题目:5532.奇偶树
Description
如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
Sample
示例1:
输入:root = [1,10,4,3,null,7,9,12,8,6,null,null,2] 输出:true 解释:每一层的节点值分别是: 0 层:[1] 1 层:[10,4] 2 层:[3,7,9] 3 层:[12,8,6,2] 由于 0 层和 2 层上的节点值都是奇数且严格递增,而 1 层和 3 层上的节点值都是偶数且严格递减,因此这是一棵奇偶树。
示例2:
输入:root = [5,4,2,3,3,7] 输出:false 解释:每一层的节点值分别是: 0 层:[5] 1 层:[4,2] 2 层:[3,3,7] 2 层上的节点值不满足严格递增的条件,所以这不是一棵奇偶树。
PS
树中节点数在范围 [1, 105] 内 1 <= Node.val <= 106
Solution
二叉树的层序遍历!维护一个队列!根据条件判断是否满足条件!
AC Code
class Solution {
public:
bool isEvenOddTree(TreeNode
* root
) {
if(root
==NULL) return true;
int level
=0;
int now
=0;
int next
=0;
int base
=0;
queue
<TreeNode
*> q
;
q
.push(root
);
now
++;
base
=root
->val
-1;
while(!q
.empty()){
TreeNode
* temp
= q
.front();
if(temp
->val
%2==level
%2) return false;
if(level
%2 && temp
->val
>= base
) return false;
if(level
%2==0 && temp
->val
<= base
) return false;
q
.pop();
now
--;
base
=temp
->val
;
if(temp
->left
) {
q
.push(temp
->left
);
next
++;
}
if(temp
->right
) {
q
.push(temp
->right
);
next
++;
}
if(now
==0){
now
=next
;
next
=0;
level
++;
if(!q
.empty()) {
base
=q
.front()->val
;
if(level
%2) base
++;
else base
--;
}
}
}
return true;
}
};