@@ -113,7 +113,7 @@ pub struct SameTree;
113
113
114
114
impl PreOrderVisitor {
115
115
/// 时间复杂度 O(n), 空间复杂度 O(n)
116
- fn iterate ( tree : & Tree ) -> Vec < usize > {
116
+ pub fn iterate ( tree : & Tree ) -> Vec < usize > {
117
117
let mut results = vec ! [ ] ;
118
118
let mut stack = vec ! [ ] ;
119
119
//point current node
@@ -140,7 +140,7 @@ impl PreOrderVisitor {
140
140
///
141
141
/// 点评:利用tree本身的node记录回溯指针(避免用栈记录回溯),
142
142
/// 使得空间复杂度由 O(n) => O(1)
143
- fn morris ( tree : & mut Tree ) -> Vec < usize > {
143
+ pub fn morris ( tree : & mut Tree ) -> Vec < usize > {
144
144
let mut results = vec ! [ ] ;
145
145
let mut cur = tree. root ;
146
146
@@ -191,7 +191,7 @@ impl PreOrderVisitor {
191
191
}
192
192
193
193
/// 时间复杂度 O(n), 空间复杂度 O(n)
194
- fn recursive ( tree : & Tree ) -> Vec < usize > {
194
+ pub fn recursive ( tree : & Tree ) -> Vec < usize > {
195
195
let mut results = vec ! [ ] ;
196
196
fn visitor ( tree : & Tree , p : Option < TreeIndex > , results : & mut Vec < usize > ) {
197
197
if let Some ( node_idx) = p {
@@ -207,7 +207,7 @@ impl PreOrderVisitor {
207
207
}
208
208
209
209
impl InOrderVisitor {
210
- fn iterate ( tree : & Tree ) -> Vec < usize > {
210
+ pub fn iterate ( tree : & Tree ) -> Vec < usize > {
211
211
let mut results = vec ! [ ] ;
212
212
let mut stack = vec ! [ ] ;
213
213
//point current node
@@ -235,7 +235,7 @@ impl InOrderVisitor {
235
235
results
236
236
}
237
237
238
- fn recursive ( tree : & Tree ) -> Vec < usize > {
238
+ pub fn recursive ( tree : & Tree ) -> Vec < usize > {
239
239
let mut results = vec ! [ ] ;
240
240
fn visitor ( tree : & Tree , p : Option < TreeIndex > , results : & mut Vec < usize > ) {
241
241
if let Some ( node_idx) = p {
@@ -289,7 +289,7 @@ impl PostOrderVisitor {
289
289
results
290
290
}
291
291
292
- fn recursive ( tree : & Tree ) -> Vec < usize > {
292
+ pub fn recursive ( tree : & Tree ) -> Vec < usize > {
293
293
let mut results = vec ! [ ] ;
294
294
fn visitor ( tree : & Tree , p : Option < TreeIndex > , results : & mut Vec < usize > ) {
295
295
if let Some ( node_idx) = p {
@@ -345,7 +345,7 @@ impl LevelOrderVisitor {
345
345
results
346
346
}
347
347
348
- fn recursive ( tree : & Tree ) -> Vec < Vec < usize > > {
348
+ pub fn recursive ( tree : & Tree ) -> Vec < Vec < usize > > {
349
349
let mut results = vec ! [ ] ;
350
350
fn visitor (
351
351
tree : & Tree ,
@@ -386,7 +386,7 @@ impl LevelOrderVisitor2 {
386
386
r
387
387
}
388
388
389
- fn recursive ( tree : & Tree ) -> Vec < Vec < usize > > {
389
+ pub fn recursive ( tree : & Tree ) -> Vec < Vec < usize > > {
390
390
let mut r = LevelOrderVisitor :: recursive ( tree) ;
391
391
r. reverse ( ) ;
392
392
r
@@ -443,7 +443,7 @@ impl ZigzagOrderVisitor {
443
443
results
444
444
}
445
445
446
- fn recursive ( tree : & Tree ) -> Vec < Vec < usize > > {
446
+ pub fn recursive ( tree : & Tree ) -> Vec < Vec < usize > > {
447
447
let mut results = vec ! [ ] ;
448
448
fn visitor (
449
449
tree : & Tree ,
@@ -482,168 +482,3 @@ impl ZigzagOrderVisitor {
482
482
results
483
483
}
484
484
}
485
-
486
- #[ test]
487
- fn t_preorder_iter ( ) {
488
- for ( t, expect) in preorder_test_data ( ) {
489
- let mut tree = construct:: new_tree ( & t) ;
490
- let r = PreOrderVisitor :: iterate ( & tree) ;
491
- assert_eq ! (
492
- expect, r,
493
- "tree = {:?}, expect = {:?}, r = {:?}" ,
494
- t, expect, r
495
- ) ;
496
- }
497
- }
498
-
499
- #[ test]
500
- fn t_preorder_morris ( ) {
501
- for ( t, expect) in preorder_test_data ( ) {
502
- let mut tree = construct:: new_tree ( & t) ;
503
- let r = PreOrderVisitor :: morris ( & mut tree) ;
504
- assert_eq ! (
505
- expect, r,
506
- "tree = {:?}, expect = {:?}, r = {:?}" ,
507
- t, expect, r
508
- ) ;
509
- }
510
- }
511
-
512
- #[ test]
513
- fn t_preorder_recursive ( ) {
514
- for ( t, expect) in preorder_test_data ( ) {
515
- let mut tree = construct:: new_tree ( & t) ;
516
- let r = PreOrderVisitor :: recursive ( & mut tree) ;
517
- assert_eq ! (
518
- expect, r,
519
- "tree = {:?}, expect = {:?}, r = {:?}" ,
520
- t, expect, r
521
- ) ;
522
- }
523
- }
524
-
525
- #[ test]
526
- fn t_inorder_iter ( ) {
527
- for ( t, expect) in inorder_test_data ( ) {
528
- let tree = construct:: new_tree ( & t) ;
529
- let r = InOrderVisitor :: iterate ( & tree) ;
530
- assert_eq ! (
531
- expect, r,
532
- "tree = {:?}, expect = {:?}, r = {:?}" ,
533
- t, expect, r
534
- ) ;
535
- }
536
- }
537
-
538
- #[ test]
539
- fn t_inorder_recursive ( ) {
540
- for ( t, expect) in inorder_test_data ( ) {
541
- let tree = construct:: new_tree ( & t) ;
542
- let r = InOrderVisitor :: recursive ( & tree) ;
543
- assert_eq ! (
544
- expect, r,
545
- "tree = {:?}, expect = {:?}, r = {:?}" ,
546
- t, expect, r
547
- ) ;
548
- }
549
- }
550
-
551
- #[ test]
552
- fn t_postorder_recursive ( ) {
553
- let nodes = vec ! [ "1" , "#" , "2" , "3" ] ;
554
- let tree = construct:: new_tree ( & nodes) ;
555
- let r = PostOrderVisitor :: recursive ( & tree) ;
556
- assert_eq ! ( vec![ 3 , 2 , 1 ] , r) ;
557
- }
558
-
559
- #[ test]
560
- fn t_postorder_iter ( ) {
561
- let nodes = vec ! [ "1" , "#" , "2" , "3" ] ;
562
- let tree = construct:: new_tree ( & nodes) ;
563
- let r = PostOrderVisitor :: iterate ( & tree) ;
564
- assert_eq ! ( vec![ 3 , 2 , 1 ] , r) ;
565
- }
566
-
567
- #[ test]
568
- fn t_levelorder_iter ( ) {
569
- let nodes = vec ! [ "3" , "9" , "20" , "#" , "#" , "15" , "7" ] ;
570
- let tree = construct:: new_tree ( & nodes) ;
571
- let r = LevelOrderVisitor :: iterate ( & tree) ;
572
- assert_eq ! ( vec![ vec![ 3 ] , vec![ 9 , 20 ] , vec![ 15 , 7 ] ] , r) ;
573
- }
574
-
575
- #[ test]
576
- fn t_levelorder_traverse ( ) {
577
- let nodes = vec ! [ "3" , "9" , "20" , "#" , "#" , "15" , "7" ] ;
578
- let tree = construct:: new_tree ( & nodes) ;
579
- let r = LevelOrderVisitor :: recursive ( & tree) ;
580
- assert_eq ! ( vec![ vec![ 3 ] , vec![ 9 , 20 ] , vec![ 15 , 7 ] ] , r) ;
581
- }
582
-
583
- #[ test]
584
- fn t_levelorder2_iter ( ) {
585
- let nodes = vec ! [ "3" , "9" , "20" , "#" , "#" , "15" , "7" ] ;
586
- let tree = construct:: new_tree ( & nodes) ;
587
- let r = LevelOrderVisitor2 :: iterate ( & tree) ;
588
- assert_eq ! ( vec![ vec![ 15 , 7 ] , vec![ 9 , 20 ] , vec![ 3 ] ] , r) ;
589
- }
590
-
591
- #[ test]
592
- fn t_levelorder2_traverse ( ) {
593
- let nodes = vec ! [ "3" , "9" , "20" , "#" , "#" , "15" , "7" ] ;
594
- let tree = construct:: new_tree ( & nodes) ;
595
- let r = LevelOrderVisitor2 :: recursive ( & tree) ;
596
- assert_eq ! ( vec![ vec![ 15 , 7 ] , vec![ 9 , 20 ] , vec![ 3 ] ] , r) ;
597
- }
598
-
599
- #[ test]
600
- fn t_levelorder_zigzag_iter ( ) {
601
- let nodes = vec ! [ "3" , "9" , "20" , "#" , "#" , "15" , "7" ] ;
602
- let tree = construct:: new_tree ( & nodes) ;
603
- let r = ZigzagOrderVisitor :: iterate ( & tree) ;
604
- assert_eq ! ( vec![ vec![ 3 ] , vec![ 20 , 9 ] , vec![ 15 , 7 ] ] , r) ;
605
- }
606
-
607
- #[ test]
608
- fn t_levelorder_zigzag_traverse ( ) {
609
- let nodes = vec ! [ "3" , "9" , "20" , "#" , "#" , "15" , "7" ] ;
610
- let tree = construct:: new_tree ( & nodes) ;
611
- let r = ZigzagOrderVisitor :: recursive ( & tree) ;
612
- assert_eq ! ( vec![ vec![ 3 ] , vec![ 20 , 9 ] , vec![ 15 , 7 ] ] , r) ;
613
- }
614
-
615
- fn preorder_test_data ( ) -> Vec < ( Vec < & ' static str > , Vec < usize > ) > {
616
- vec ! [
617
- ( vec![ "1" , "#" , "2" , "3" ] , vec![ 1 , 2 , 3 ] ) ,
618
- (
619
- vec![ "1" , "2" , "#" , "3" , "#" , "#" , "#" , "4" ] ,
620
- vec![ 1 , 2 , 3 , 4 ] ,
621
- ) ,
622
- (
623
- vec![ "1" , "2" , "#" , "3" , "#" , "#" , "#" , "#" , "4" ] ,
624
- vec![ 1 , 2 , 3 , 4 ] ,
625
- ) ,
626
- (
627
- vec![ "1" , "2" , "#" , "3" , "4" , "#" , "#" , "5" ] ,
628
- vec![ 1 , 2 , 3 , 5 , 4 ] ,
629
- ) ,
630
- ]
631
- }
632
-
633
- fn inorder_test_data ( ) -> Vec < ( Vec < & ' static str > , Vec < usize > ) > {
634
- vec ! [
635
- ( vec![ "1" , "#" , "2" , "3" ] , vec![ 1 , 3 , 2 ] ) ,
636
- (
637
- vec![ "1" , "2" , "#" , "3" , "#" , "#" , "#" , "4" ] ,
638
- vec![ 4 , 3 , 2 , 1 ] ,
639
- ) ,
640
- (
641
- vec![ "1" , "2" , "#" , "3" , "#" , "#" , "#" , "#" , "4" ] ,
642
- vec![ 3 , 4 , 2 , 1 ] ,
643
- ) ,
644
- (
645
- vec![ "1" , "2" , "#" , "3" , "4" , "#" , "#" , "5" ] ,
646
- vec![ 5 , 3 , 2 , 4 , 1 ] ,
647
- ) ,
648
- ]
649
- }
0 commit comments