108. 将有序数组转换为二叉搜索树

题目描述

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

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

代码实现

class Solution {
public:
    TreeNode *sortedArrayToBST(vector<int> &num) {
        
         return sortedArrayToBSTCore(num,0,num.size()-1);
    }
    //注意这个递归核心函数接口的设计问题
    //由于递归递推时涉及到使用一定范围内的数组元素构造树
    //而对于数组,我们可以用一对下标来表示范围,递归的终止条件
    //可以依据这对下标进行设计
    TreeNode* sortedArrayToBSTCore(vector<int> &num,int start,int end)
    {
        if(start > end)
            return nullptr;
        //注意mid = start+(end-start)/2的意义
        //令 x = [end-(start+1)+1]/2 = (end-start)/2
        //[end-(start+1)+1]为除了第一个元素,数组剩余的元素个数
        //mid划分成的前后半部分元素个数为:
        //a = 1(start)+|x|(向下取整)(前半部分包含mid)
        //b = |x|(向上取整)
        //而|x|(向下取整) == |x|(向上取整) 或者 
        //|x|(向下取整)+1 == |x|(向上取整) 
        //所以a==b或者a=b+1
        int mid = start+(end-start)/2;
        TreeNode * root = new TreeNode(num[mid]);
        root->left = sortedArrayToBSTCore(num,start,mid-1);
        root->right = sortedArrayToBSTCore(num,mid+1,end);
        return root;

    }
};

posted on 2021-06-13 08:12  朴素贝叶斯  阅读(22)  评论(0编辑  收藏  举报

导航