1.描述:
给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。
注意事项
There may exist multiple valid solutions, return any of them.
给出数组 [1,2,3,4,5,6,7]
, 返回
4
/ \
2 6
/ \ / \
1 3 5 7
2.思路:
这个题需要写出两个函数,主函数调用支函数,支函数三个形参为数组,0,数组长度-1,先求出数组的中位数,作为新树的根节点,然后再找出中位数两边的数运用递归使这两个数作为根节点的左右子树。
3.代码:
TreeNode *sortedArrayToBST(vector<int> &A) {
return sortedArrayToBSTCore(A,0,A.size()-1);
}
TreeNode* sortedArrayToBSTCore(const vector<int>& num,int begin,int end)
{
if(begin>end)
return NULL;
int medium=begin+(end-begin)/2;
TreeNode* pNode=new TreeNode(num[medium]);
pNode->left=sortedArrayToBSTCore(num,begin,medium-1);
pNode->right=sortedArrayToBSTCore(num,medium+1,end);
return pNode;
}
4.感想:
当想用递归但已给函数的各个属性不允许递归时就可以考虑写两个函数,用支函数去实现递归。