4
4
* Author: xBLACKICEx ([email protected] )
5
5
*/
6
6
7
- use hello_algo_rust:: include:: { vec_to_tree , TreeNode , print_util } ;
7
+ use hello_algo_rust:: include:: { print_util , vec_to_tree , TreeNode } ;
8
8
use hello_algo_rust:: op_vec;
9
9
10
10
use std:: cell:: RefCell ;
@@ -14,38 +14,54 @@ use std::rc::Rc;
14
14
fn pre_order ( root : Option < & Rc < RefCell < TreeNode > > > ) -> Vec < i32 > {
15
15
let mut result = vec ! [ ] ;
16
16
17
- if let Some ( node) = root {
18
- // 访问优先级:根节点 -> 左子树 -> 右子树
19
- result. push ( node. borrow ( ) . val ) ;
20
- result. extend ( pre_order ( node. borrow ( ) . left . as_ref ( ) ) ) ;
21
- result. extend ( pre_order ( node. borrow ( ) . right . as_ref ( ) ) ) ;
17
+ fn dfs ( root : Option < & Rc < RefCell < TreeNode > > > , res : & mut Vec < i32 > ) {
18
+ if let Some ( node) = root {
19
+ // 访问优先级:根节点 -> 左子树 -> 右子树
20
+ let node = node. borrow ( ) ;
21
+ res. push ( node. val ) ;
22
+ dfs ( node. left . as_ref ( ) , res) ;
23
+ dfs ( node. right . as_ref ( ) , res) ;
24
+ }
22
25
}
26
+ dfs ( root, & mut result) ;
27
+
23
28
result
24
29
}
25
30
26
31
/* 中序遍历 */
27
32
fn in_order ( root : Option < & Rc < RefCell < TreeNode > > > ) -> Vec < i32 > {
28
33
let mut result = vec ! [ ] ;
29
34
30
- if let Some ( node) = root {
31
- // 访问优先级:左子树 -> 根节点 -> 右子树
32
- result. extend ( in_order ( node. borrow ( ) . left . as_ref ( ) ) ) ;
33
- result. push ( node. borrow ( ) . val ) ;
34
- result. extend ( in_order ( node. borrow ( ) . right . as_ref ( ) ) ) ;
35
+ fn dfs ( root : Option < & Rc < RefCell < TreeNode > > > , res : & mut Vec < i32 > ) {
36
+ if let Some ( node) = root {
37
+ // 访问优先级:左子树 -> 根节点 -> 右子树
38
+ let node = node. borrow ( ) ;
39
+ dfs ( node. left . as_ref ( ) , res) ;
40
+ res. push ( node. val ) ;
41
+ dfs ( node. right . as_ref ( ) , res) ;
42
+ }
35
43
}
44
+ dfs ( root, & mut result) ;
45
+
36
46
result
37
47
}
38
48
39
49
/* 后序遍历 */
40
50
fn post_order ( root : Option < & Rc < RefCell < TreeNode > > > ) -> Vec < i32 > {
41
51
let mut result = vec ! [ ] ;
42
52
43
- if let Some ( node) = root {
44
- // 访问优先级:左子树 -> 右子树 -> 根节点
45
- result. extend ( post_order ( node. borrow ( ) . left . as_ref ( ) ) ) ;
46
- result. extend ( post_order ( node. borrow ( ) . right . as_ref ( ) ) ) ;
47
- result. push ( node. borrow ( ) . val ) ;
53
+ fn dfs ( root : Option < & Rc < RefCell < TreeNode > > > , res : & mut Vec < i32 > ) {
54
+ if let Some ( node) = root {
55
+ // 访问优先级:左子树 -> 右子树 -> 根节点
56
+ let node = node. borrow ( ) ;
57
+ dfs ( node. left . as_ref ( ) , res) ;
58
+ dfs ( node. right . as_ref ( ) , res) ;
59
+ res. push ( node. val ) ;
60
+ }
48
61
}
62
+
63
+ dfs ( root, & mut result) ;
64
+
49
65
result
50
66
}
51
67
0 commit comments