// [-10,-3,0,5,9] [0,-3,9,-10,null,5]
// [1,3] [3,1]
// 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::rc::Rc;
use std::cell::RefCell;
pub struct Solution;
impl Solution {
pub fn sorted_array_to_bst(nums: Vec<i32>) -> Option<Rc<RefCell<TreeNode>>> {
fn helper(nums: &[i32]) -> Option<Rc<RefCell<TreeNode>>> {
if nums.is_empty() {
return None;
}
let mid = nums.len() / 2;
let root = Rc::new(RefCell::new(TreeNode::new(nums[mid])));
root.borrow_mut().left = helper(&nums[..mid]);
root.borrow_mut().right = helper(&nums[mid + 1..]);
Some(root)
}
helper(&nums)
}
}
fn main() {
// 示例 1
let nums = vec![-10, -3, 0, 5, 9];
let bst = Solution::sorted_array_to_bst(nums);
println!("{:?}", bst); // 输出:[0,-3,9,-10,null,5]
// 示例 2
let nums = vec![1, 3];
let bst = Solution::sorted_array_to_bst(nums);
println!("{:?}", bst); // 输出:[3,1]
}