leetcode简单题22 N.108 将有序数组转换为二叉搜索树


 

// [-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]
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值