题目:给定一个整数数组,元素各不相同且按升序排列,编写一个算法,创建一个高度最小的二叉查找树。
解法:二叉查找树的特点是根的左子树都比根结点小,右子树都比根结点大,左右子树结点数目相同时有望时树的高度最小。因此根结点可以取数组的中位数。左子结点为数组前半段的中位数,右子结点为数组后半段的中位数,递归过程实现,需要注意的是递归的终止条件。
BinaryTreeNode* CreateCore(int* array, int begin, int end)
{
if(begin > end)
return NULL;
int mid = (begin+end)/2;
BinaryTreeNode* pRoot = CreateBinaryTreeNode(array[mid]);
pRoot->m_pLeft = CreateCore(array, begin, mid-1);
pRoot->m_pRight = CreateCore(array, mid+1, end);
return pRoot;
}
BinaryTreeNode* CreateSearchTree(int* array, int length)
{
if(array == NULL || length < 1)
return NULL;
return CreateCore(array,0, length-1);
}