refactor rust problems and finish p104 and p108

This commit is contained in:
2025-05-15 21:02:19 +08:00
parent 5e6299439c
commit 3b805a6422
7 changed files with 167 additions and 44 deletions

View File

@@ -0,0 +1,6 @@
[package]
name = "p104"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,106 @@
// Definition for a binary tree node.
#[derive(Debug, PartialEq, Eq)]
pub struct TreeNode {
pub val: i32,
pub left: Option<Rc<RefCell<TreeNode>>>,
pub right: Option<Rc<RefCell<TreeNode>>>,
}
impl TreeNode {
#[inline]
pub fn new(val: i32) -> Self {
TreeNode {
val,
left: None,
right: None,
}
}
}
use std::cell::RefCell;
use std::rc::Rc;
// 定义Solution结构体
struct Solution;
impl Solution {
pub fn max_depth(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
match root {
None => 0,
Some(node) => {
let left = Self::max_depth(node.borrow().left.clone());
let right = Self::max_depth(node.borrow().right.clone());
1 + left.max(right)
}
}
}
}
// 创建树的辅助函数
fn create_tree(values: Vec<Option<i32>>) -> Option<Rc<RefCell<TreeNode>>> {
if values.is_empty() || values[0].is_none() {
return None;
}
let root = Rc::new(RefCell::new(TreeNode::new(values[0].unwrap())));
let mut queue = std::collections::VecDeque::new();
queue.push_back(Rc::clone(&root));
let mut i = 1;
while i < values.len() && !queue.is_empty() {
let node = queue.pop_front().unwrap();
// 左子节点
if i < values.len() {
if let Some(val) = values[i] {
let left = Rc::new(RefCell::new(TreeNode::new(val)));
node.borrow_mut().left = Some(Rc::clone(&left));
queue.push_back(left);
}
}
i += 1;
// 右子节点
if i < values.len() {
if let Some(val) = values[i] {
let right = Rc::new(RefCell::new(TreeNode::new(val)));
node.borrow_mut().right = Some(Rc::clone(&right));
queue.push_back(right);
}
}
i += 1;
}
Some(root)
}
fn main() {
// 测试用例1: [3,9,20,null,null,15,7]
let test1 = create_tree(vec![
Some(3),
Some(9),
Some(20),
None,
None,
Some(15),
Some(7),
]);
println!(
"Test Case 1 - Expected: 3, Got: {}",
Solution::max_depth(test1)
);
// 测试用例2: [1,null,2]
let test2 = create_tree(vec![Some(1), None, Some(2)]);
println!(
"Test Case 2 - Expected: 2, Got: {}",
Solution::max_depth(test2)
);
// 测试用例3: []
let test3 = create_tree(vec![]);
println!(
"Test Case 3 - Expected: 0, Got: {}",
Solution::max_depth(test3)
);
// 你可以添加更多测试用例
}