Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal height.
#include <iostream>
using namespace std;
struct TreeNode
{
int value;
TreeNode * left;
TreeNode * right;
TreeNode(int v)
{
value = v;
left = NULL;
right = NULL;
}
};
void createTree(int * array, int length);
void createMinTree(int * array, TreeNode * node, int l, int r);
TreeNode * createNode(int * array, int l, int r);
void createTree(int * array, int length)
{
int middle = (length - 1) / 2;
TreeNode * root = new TreeNode(array[middle]);
createMinTree(array, root, 0, length - 1);
}
//
void createMinTree(int * array, TreeNode * node, int l, int r)
{
if (r - l <= 0)
{
return;
}
int middle = (r - l) / 2 + l;
cout<<array[middle]<<endl;
if (middle != l)
node->left = createNode(array, l, middle - 1);
node->right = createNode(array, middle + 1, r);
createMinTree(array, node->left, l , middle - 1);
createMinTree(array, node->right, middle + 1, r);
}
TreeNode * createNode(int * array, int l, int r)
{
if (l > r)
return NULL;
int middle = (r - l) / 2 + l;
TreeNode * node = new TreeNode(array[middle]);
return node;
}
int main()
{
int array[5] = {0, 1, 2, 3, 4};
createTree(array, 5);
return 0;
}