Skip to content

Commit 7a345fc

Browse files
authored
Idiomatic rust (#1505)
1 parent 1cc310a commit 7a345fc

File tree

2 files changed

+18
-20
lines changed

2 files changed

+18
-20
lines changed

codes/rust/include/list_node.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ impl<T> ListNode<T> {
2929
for item in array.iter().rev() {
3030
let node = Rc::new(RefCell::new(ListNode {
3131
val: *item,
32-
next: head.clone(),
32+
next: head.take(),
3333
}));
3434
head = Some(node);
3535
}
@@ -44,14 +44,14 @@ impl<T> ListNode<T> {
4444
T: std::hash::Hash + Eq + Copy + Clone,
4545
{
4646
let mut hashmap = HashMap::new();
47-
if let Some(node) = linked_list {
48-
let mut current = Some(node.clone());
49-
while let Some(cur) = current {
50-
let borrow = cur.borrow();
51-
hashmap.insert(borrow.val.clone(), cur.clone());
52-
current = borrow.next.clone();
53-
}
47+
let mut node = linked_list;
48+
49+
while let Some(cur) = node {
50+
let borrow = cur.borrow();
51+
hashmap.insert(borrow.val.clone(), cur.clone());
52+
node = borrow.next.clone();
5453
}
54+
5555
hashmap
5656
}
5757
}

codes/rust/include/tree_node.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,23 +72,21 @@ pub fn vec_to_tree(arr: Vec<Option<i32>>) -> Option<Rc<RefCell<TreeNode>>> {
7272
}
7373

7474
/* 将二叉树序列化为列表:递归 */
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);
7884
}
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);
8785
}
8886

8987
/* 将二叉树序列化为列表 */
9088
pub fn tree_to_vec(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<Option<i32>> {
9189
let mut res = vec![];
92-
tree_to_vec_dfs(root, 0, &mut res);
90+
tree_to_vec_dfs(root.as_ref(), 0, &mut res);
9391
res
9492
}

0 commit comments

Comments
 (0)