有序数组生成平衡搜索二叉树

【题目】

给定一个有序数组sortArr,已知其中没有重复值,用这个有序
数组生成一棵平衡搜索二叉树,而且该搜索二叉树中序遍历的
结果与sortArr一致。
PS:平衡二叉树左右子树的高度差不能超过1 .

算法:
#include <vector>
#include <iostream>

using namespace std;

typedef struct NODE
{
    NODE * left;
    NODE * right;
    int value;
} node;



node* generate(vector<int> &sortArr, int start, int end){
    if (start>end)
    {
        return NULL;
    }
    int mid = (start+end)>>1;
    node * temp = (node *) malloc ( sizeof(node) );
    temp->value = sortArr[mid];
    temp->left = generate(sortArr,start,mid-1);
    temp->right = generate(sortArr,mid+1,end);
    return temp;
}

node* generateTree(vector<int> &sortArr){
    if(sortArr.empty()) return NULL;
    return generate(sortArr , 0, sortArr.size()-1);
}

int main()
{
    vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12};
    node * rHead = generateTree(arr);

    return 0;
}
posted @ 2021-05-10 22:36  七夜i  阅读(135)  评论(0编辑  收藏  举报