题目:给定一个整数数组,元素各不相同且按升序排列,编写一个算法,创建一个高度最小的二叉查找树。
解法:二叉查找树的特点是根的左子树都比根结点小,右子树都比根结点大,左右子树结点数目相同时有望时树的高度最小。因此根结点可以取数组的中位数。左子结点为数组前半段的中位数,右子结点为数组后半段的中位数,递归过程实现,需要注意的是递归的终止条件。
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);
}
本文介绍了一种从有序数组构建高度最小二叉查找树的方法。通过选取数组中位数作为根节点,并递归地对左右子数组进行相同操作来确保树的平衡。这种方法能够有效地构造出高度尽可能小的二叉查找树。
352

被折叠的 条评论
为什么被折叠?



