<?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]));
欢迎大神指点一二。欢迎大家评论