Skip to content

Commit 4abec7d

Browse files
author
gssdromen
committed
[新题目]
1 parent 4b52521 commit 4abec7d

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

108. 将有序数组转换为二叉搜索树/Rust/Cargo.lock

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "Rust"
3+
version = "0.1.0"
4+
authors = ["gssdromen <[email protected]>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#[derive(Debug, PartialEq, Eq)]
2+
pub struct TreeNode {
3+
pub val: i32,
4+
pub left: Option<Rc<RefCell<TreeNode>>>,
5+
pub right: Option<Rc<RefCell<TreeNode>>>,
6+
}
7+
8+
impl TreeNode {
9+
#[inline]
10+
pub fn new(val: i32) -> Self {
11+
TreeNode {
12+
val,
13+
left: None,
14+
right: None
15+
}
16+
}
17+
}
18+
19+
struct Solution {}
20+
21+
use std::rc::Rc;
22+
use std::cell::RefCell;
23+
24+
impl Solution {
25+
pub fn sorted_array_to_bst(nums: Vec<i32>) -> Option<Rc<RefCell<TreeNode>>> {
26+
if nums.is_empty() {
27+
return None;
28+
} else {
29+
return Solution::helper(&nums, 0, nums.len());
30+
}
31+
}
32+
33+
fn helper(nums: &Vec<i32>, start: usize, end: usize) -> Option<Rc<RefCell<TreeNode>>> {
34+
if start >= end {
35+
return None;
36+
} else {
37+
let mid = (start + end) / 2;
38+
let node = Rc::new(RefCell::new(TreeNode::new(nums[mid])));
39+
node.borrow_mut().left = Solution::helper(nums, start, mid);
40+
node.borrow_mut().right = Solution::helper(nums, mid + 1, end);
41+
42+
return Some(node);
43+
}
44+
}
45+
}
46+
47+
fn main() {
48+
println!("Hello, world!");
49+
}

0 commit comments

Comments
 (0)