mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-25 00:56:29 +08:00
Compare commits
2 commits
23954c1539
...
9e9981f493
Author | SHA1 | Date | |
---|---|---|---|
|
9e9981f493 | ||
|
7a345fc66b |
2 changed files with 18 additions and 20 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue