<?php
/**
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 层上的节点值不满足严格递增的条件,所以这不是一棵奇偶树。
**/
class Solution {
public $age = 1;
/**
* @param TreeNode $root
* @return Boolean
*/
public function isEvenOddTree($root) {
$root = array_filter($root);
$root = array_merge($root,[]);
$arr = [];
$leven = 1;
$index = 1;
while(count($root) > 0) {
$arr[]=array_splice($root,0,$index);
$levenArr = $arr[$leven - 1];
if($leven % 2 !== 0){
//奇数
$oddArr = array_filter($levenArr, array($this,"odd"));
if(count($oddArr) != count($levenArr)) {
var_dump(1);
return false;
}
//严格递增
$a = $levenArr;
ksort($a);
$a = array_unique($a);
var_dump($a);
if( $a != $levenArr ) {
var_dump(2);
return false;
}
}else{
//打印偶数
$evenArr = array_filter($levenArr, array($this,"even"));
if(count($evenArr) != count($levenArr)) {
var_dump(3);
return false;
}
//严格递减
$b = $levenArr;
krsort($b);
$b = array_unique($b);
if($b != $levenArr ) {
var_dump(4);
return false;
}
}
if(count($levenArr) != $index) {
var_dump(5);
return false;
}
$leven++;
$index++;
}
return true;
}
//判断是否为奇数的方法
private function odd($num) {
//判断是否为整数
if (floor($num) == $num) {
//如果是奇数会返回true
return $num % 2;
} else {
return false;
}
}
//判断是否为偶数的方法
public function even($num) {
//判断是否为整数
if (floor($num) == $num) {
//如果是偶数则取反会返回true
return !($num % 2);
} else {
return false;
}
}
}
$solution = new Solution();
var_dump($solution->isEvenOddTree(
[5,4,2,3,3,7]));