Leetcode_convert-sorted-array-to-binary-search-tree

本文介绍如何将一个升序排列的数组转换为高度平衡的二叉搜索树。通过递归方式寻找中间节点作为根节点,并分别构建左右子树。提供两种实现方案,第一种采用整体分割的方式构建树结构,第二种则利用递归定义直接构造。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

地址:http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

思路:先找到头节点,再递归构造左子树和右子树。124ms。

参考代码:

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void construct_tree(TreeNode**p, vector<int>vec)
    {
        if(vec.empty())
            return;
        int mid = vec.size()/2;
        *p = new TreeNode(vec[mid]);
        vector<int>left_vec, right_vec;
        for(int i = 0; i<mid; ++i)
            left_vec.push_back(vec[i]);
        for(int i=mid+1; i<vec.size(); ++i)
            right_vec.push_back(vec[i]);
        construct_tree(&((*p)->left), left_vec);
        construct_tree(&((*p)->right), right_vec);
    }
    TreeNode *sortedArrayToBST(vector<int> &num) {
        if(num.empty())
            return NULL;
        TreeNode* head = NULL;
        construct_tree(&head, num);
        return head;
    }
};

SECOND TRIAL, 60MS

class Solution {
private:
    TreeNode* construct_tree(TreeNode* root, vector<int>& num, int begin, int end)
    {
        if(begin > end)
            return NULL;
        int mid = (begin+end)/2;
        root = new TreeNode(num[mid]);
        root->left = construct_tree(root->left, num, begin, mid-1);
        root->right = construct_tree(root->right, num, mid+1, end);
        return root;
    }
public:
    TreeNode *sortedArrayToBST(vector<int> &num) {
        return construct_tree(NULL, num, 0, num.size()-1);
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值