【题目】
给定一个有序数组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;
}