如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
- 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
- 偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
- 奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
来源:力扣(LeetCode)
简单的层次遍历,每次遍历的时候判断节点是否满足要求,用isEvenLevel来存储当前的层数,层数为偶数即为偶数层。
class Solution {
public boolean isEvenOddTree(TreeNode root) {
Queue<TreeNode> q=new LinkedList<>();
q.add(root);
int isEvenLevel=0;
while(!q.isEmpty()){
TreeNode lastNode=null;
TreeNode node=null;
int size=q.size();
while(size>0){
node=q.poll();
if(isEvenLevel%2==0){
if(node.val%2==0)
return false;
if(lastNode!=null)
if(lastNode.val>=node.val)
return false;
}else{
if(node.val%2==1)
return false;
if(lastNode!=null)
if(lastNode.val<=node.val)
return false;
}
if(node.left!=null)
q.add(node.left);
if(node.right!=null)
q.add(node.right);
lastNode=node;
size--;
}
isEvenLevel++;
}
return true;
}
}