From 282d882d531480c83920cfeddaf88cbd5fe6065c Mon Sep 17 00:00:00 2001 From: rongyi Date: Mon, 20 May 2024 15:26:21 +0800 Subject: [PATCH] Idiomatic rust --- .../preorder_traversal_i_compact.rs | 8 ++++---- .../preorder_traversal_ii_compact.rs | 10 +++++----- .../preorder_traversal_iii_compact.rs | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/codes/rust/chapter_backtracking/preorder_traversal_i_compact.rs b/codes/rust/chapter_backtracking/preorder_traversal_i_compact.rs index 462197c7f..489668760 100644 --- a/codes/rust/chapter_backtracking/preorder_traversal_i_compact.rs +++ b/codes/rust/chapter_backtracking/preorder_traversal_i_compact.rs @@ -10,7 +10,7 @@ use std::{cell::RefCell, rc::Rc}; use tree_node::{vec_to_tree, TreeNode}; /* 前序遍历:例题一 */ -fn pre_order(res: &mut Vec>>, root: Option>>) { +fn pre_order(res: &mut Vec>>, root: Option<&Rc>>) { if root.is_none() { return; } @@ -19,8 +19,8 @@ fn pre_order(res: &mut Vec>>, root: Option>>>, path: &mut Vec>>, - root: Option>>, + root: Option<&Rc>>, ) { if root.is_none() { return; @@ -25,10 +25,10 @@ fn pre_order( // 记录解 res.push(path.clone()); } - pre_order(res, path, node.borrow().left.clone()); - pre_order(res, path, node.borrow().right.clone()); + pre_order(res, path, node.borrow().left.as_ref()); + pre_order(res, path, node.borrow().right.as_ref()); // 回退 - path.remove(path.len() - 1); + path.pop(); } } @@ -41,7 +41,7 @@ pub fn main() { // 前序遍历 let mut path = Vec::new(); let mut res = Vec::new(); - pre_order(&mut res, &mut path, root); + pre_order(&mut res, &mut path, root.as_ref()); println!("\n输出所有根节点到节点 7 的路径"); for path in res { diff --git a/codes/rust/chapter_backtracking/preorder_traversal_iii_compact.rs b/codes/rust/chapter_backtracking/preorder_traversal_iii_compact.rs index 1c834fe64..db5a27e3b 100644 --- a/codes/rust/chapter_backtracking/preorder_traversal_iii_compact.rs +++ b/codes/rust/chapter_backtracking/preorder_traversal_iii_compact.rs @@ -13,7 +13,7 @@ use tree_node::{vec_to_tree, TreeNode}; fn pre_order( res: &mut Vec>>>, path: &mut Vec>>, - root: Option>>, + root: Option<&Rc>>, ) { // 剪枝 if root.is_none() || root.as_ref().unwrap().borrow().val == 3 { @@ -26,10 +26,10 @@ fn pre_order( // 记录解 res.push(path.clone()); } - pre_order(res, path, node.borrow().left.clone()); - pre_order(res, path, node.borrow().right.clone()); + pre_order(res, path, node.borrow().left.as_ref()); + pre_order(res, path, node.borrow().right.as_ref()); // 回退 - path.remove(path.len() - 1); + path.pop(); } } @@ -42,7 +42,7 @@ pub fn main() { // 前序遍历 let mut path = Vec::new(); let mut res = Vec::new(); - pre_order(&mut res, &mut path, root); + pre_order(&mut res, &mut path, root.as_ref()); println!("\n输出所有根节点到节点 7 的路径,路径中不包含值为 3 的节点"); for path in res {