crack the code interview 4.3

来源:互联网 发布:谷嫂淘宝同款排除王 编辑:程序博客网 时间:2024/04/27 03:59

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;
}

0 0