Idiomatic rust (#1505)

This commit is contained in:
rongyi 2024-09-12 17:38:16 +08:00 committed by GitHub
parent 1cc310a682
commit 7a345fc66b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 20 deletions

View file

@ -29,7 +29,7 @@ impl<T> ListNode<T> {
for item in array.iter().rev() { for item in array.iter().rev() {
let node = Rc::new(RefCell::new(ListNode { let node = Rc::new(RefCell::new(ListNode {
val: *item, val: *item,
next: head.clone(), next: head.take(),
})); }));
head = Some(node); head = Some(node);
} }
@ -44,14 +44,14 @@ impl<T> ListNode<T> {
T: std::hash::Hash + Eq + Copy + Clone, T: std::hash::Hash + Eq + Copy + Clone,
{ {
let mut hashmap = HashMap::new(); let mut hashmap = HashMap::new();
if let Some(node) = linked_list { let mut node = linked_list;
let mut current = Some(node.clone());
while let Some(cur) = current { while let Some(cur) = node {
let borrow = cur.borrow(); let borrow = cur.borrow();
hashmap.insert(borrow.val.clone(), cur.clone()); hashmap.insert(borrow.val.clone(), cur.clone());
current = borrow.next.clone(); node = borrow.next.clone();
}
} }
hashmap hashmap
} }
} }

View file

@ -72,23 +72,21 @@ pub fn vec_to_tree(arr: Vec<Option<i32>>) -> Option<Rc<RefCell<TreeNode>>> {
} }
/* 将二叉树序列化为列表:递归 */ /* 将二叉树序列化为列表:递归 */
fn tree_to_vec_dfs(root: Option<Rc<RefCell<TreeNode>>>, i: usize, res: &mut Vec<Option<i32>>) { fn tree_to_vec_dfs(root: Option<&Rc<RefCell<TreeNode>>>, i: usize, res: &mut Vec<Option<i32>>) {
if root.is_none() { if let Some(root) = root {
return; // i + 1 is the minimum valid size to access index i
while res.len() < i + 1 {
res.push(None);
}
res[i] = Some(root.borrow().val);
tree_to_vec_dfs(root.borrow().left.as_ref(), 2 * i + 1, res);
tree_to_vec_dfs(root.borrow().right.as_ref(), 2 * i + 2, res);
} }
let root = root.unwrap();
// i + 1 is the minimum valid size to access index i
while res.len() < i + 1 {
res.push(None);
}
res[i] = Some(root.borrow().val);
tree_to_vec_dfs(root.borrow().left.clone(), 2 * i + 1, res);
tree_to_vec_dfs(root.borrow().right.clone(), 2 * i + 2, res);
} }
/* 将二叉树序列化为列表 */ /* 将二叉树序列化为列表 */
pub fn tree_to_vec(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<Option<i32>> { pub fn tree_to_vec(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<Option<i32>> {
let mut res = vec![]; let mut res = vec![];
tree_to_vec_dfs(root, 0, &mut res); tree_to_vec_dfs(root.as_ref(), 0, &mut res);
res res
} }