@@ -72,23 +72,21 @@ pub fn vec_to_tree(arr: Vec<Option<i32>>) -> Option<Rc<RefCell<TreeNode>>> {
72
72
}
73
73
74
74
/* 将二叉树序列化为列表:递归 */
75
- fn tree_to_vec_dfs ( root : Option < Rc < RefCell < TreeNode > > > , i : usize , res : & mut Vec < Option < i32 > > ) {
76
- if root. is_none ( ) {
77
- return ;
75
+ fn tree_to_vec_dfs ( root : Option < & Rc < RefCell < TreeNode > > > , i : usize , res : & mut Vec < Option < i32 > > ) {
76
+ if let Some ( root) = root {
77
+ // i + 1 is the minimum valid size to access index i
78
+ while res. len ( ) < i + 1 {
79
+ res. push ( None ) ;
80
+ }
81
+ res[ i] = Some ( root. borrow ( ) . val ) ;
82
+ tree_to_vec_dfs ( root. borrow ( ) . left . as_ref ( ) , 2 * i + 1 , res) ;
83
+ tree_to_vec_dfs ( root. borrow ( ) . right . as_ref ( ) , 2 * i + 2 , res) ;
78
84
}
79
- let root = root. unwrap ( ) ;
80
- // i + 1 is the minimum valid size to access index i
81
- while res. len ( ) < i + 1 {
82
- res. push ( None ) ;
83
- }
84
- res[ i] = Some ( root. borrow ( ) . val ) ;
85
- tree_to_vec_dfs ( root. borrow ( ) . left . clone ( ) , 2 * i + 1 , res) ;
86
- tree_to_vec_dfs ( root. borrow ( ) . right . clone ( ) , 2 * i + 2 , res) ;
87
85
}
88
86
89
87
/* 将二叉树序列化为列表 */
90
88
pub fn tree_to_vec ( root : Option < Rc < RefCell < TreeNode > > > ) -> Vec < Option < i32 > > {
91
89
let mut res = vec ! [ ] ;
92
- tree_to_vec_dfs ( root, 0 , & mut res) ;
90
+ tree_to_vec_dfs ( root. as_ref ( ) , 0 , & mut res) ;
93
91
res
94
92
}
0 commit comments