1
+ #[ derive( Debug , PartialEq , Eq ) ]
2
+ pub struct TreeNode {
3
+ pub val : i32 ,
4
+ pub left : Option < Rc < RefCell < TreeNode > > > ,
5
+ pub right : Option < Rc < RefCell < TreeNode > > > ,
6
+ }
7
+
8
+ #[ allow( unused) ]
9
+ impl TreeNode {
10
+ #[ inline]
11
+ pub fn new ( val : i32 ) -> Self {
12
+ TreeNode {
13
+ val,
14
+ left : None ,
15
+ right : None ,
16
+ }
17
+ }
18
+ }
19
+
20
+ use std:: rc:: Rc ;
21
+ use std:: cell:: RefCell ;
22
+ use crate :: q:: Solution ;
23
+
24
+ #[ allow( unused) ]
25
+ impl Solution {
26
+ pub fn is_even_odd_tree ( root : Option < Rc < RefCell < TreeNode > > > ) -> bool {
27
+ // 方法1
28
+ // 层序遍历,按题目说明检查即可
29
+ // AC 24ms 11.5mb 105/105
30
+ use std:: collections:: VecDeque ;
31
+ let mut que = VecDeque :: new ( ) ;
32
+ que. push_back ( root) ;
33
+ let mut level = 0 ;
34
+ while !que. is_empty ( ) {
35
+ let size = que. len ( ) ;
36
+ let mut values = Vec :: new ( ) ;
37
+ for _ in 0 ..size {
38
+ let node = que. pop_front ( ) . unwrap ( ) ;
39
+ if let Some ( node) = node {
40
+ let mut node_ptr_mut = node. borrow_mut ( ) ;
41
+ que. push_back ( node_ptr_mut. left . take ( ) ) ;
42
+ que. push_back ( node_ptr_mut. right . take ( ) ) ;
43
+ values. push ( node_ptr_mut. val ) ;
44
+ }
45
+ }
46
+ if level & 1 == 1 {
47
+ if values. len ( ) > 0 && values[ 0 ] & 1 == 1 { return false ; }
48
+ for i in 1 ..values. len ( ) {
49
+ if values[ i] >= values[ i - 1 ] || values[ i] & 1 == 1 { return false ; }
50
+ }
51
+ } else {
52
+ if values. len ( ) > 0 && values[ 0 ] & 1 == 0 { return false ; }
53
+ for i in 1 ..values. len ( ) {
54
+ if values[ i] <= values[ i - 1 ] || values[ i] & 1 == 0 { return false ; }
55
+ }
56
+ }
57
+ level += 1 ;
58
+ }
59
+ true
60
+ }
61
+ }
0 commit comments