您的位置:首页 > 其它

Lintcode-递归-177 把排序数组转换为高度最小的二叉搜索树

2017-09-01 00:00 281 查看
[align=left]点此进入题目[/align]

解题思路:首先这道题是建立二叉树的题,建立二叉树基本上就是递归最简单了,所以这道题要用递归。根据样例可以知道,给一个数组[1,2,3,4,5,6,7],然后将中间的数4作为树的根节点,然后4左边的数组作为左子树,4右边的数组作为左子树,然后进行递归。递归结束的条件就是数组为空。
解题过程:得到一个a
的数组,如果n是奇数的话,然后去取mid=1+n/2位置的值,若n是偶数的话,取mid=n/2位置的值。新建一个树,根是a[mid]。该树的左子树的数组是从a[1]到a[mid-1],左子树是a[mid+1]到a
。然后进行递归,直到数组为空。
以下是代码实现:
TreeNode*sortedArrayToBST(vector<int> &A)

{
   int length=A.size();\\得到向量A的长度
   if(length!=0)\\只有向量A的元素个数不为0时,进行递归,否则返回NULL
   
{
       int m;
       if(length%2==0) m=length/2;
       else m=1+length/2;\\取得根节点的值,位置赋值给m
       TreeNode *t=new TreeNode();
       t->val=A[m-1];\\建立新树,并赋值根节点;
       vector<int>::iterator ite;
       vector<int>A1,A2;
       ite=A.begin();
       if(ite+m-1>A.begin()) A1.assign(A.begin(),ite+m-1);\\首先判断该节点的左边数列是否为空,然后赋值给A1
       if(A.end()!=ite+m) A2.assign(ite+m,A.end());\\同上
       t->left=sortedArrayToBST(A1);\\左子树递归
       t->right=sortedArrayToBST(A2);\\右子树递归
       return t;
   
}
   else return NULL;
}
注意事项:这道题也不算太难,重点就是注意建立二叉树的递归,以及明白如何截取一个向量数组的一部分值给另一个向量数组。然后进行简单的递归,也要注意正确取到根节点的值,一个判断数组是否为空。
个人感受:我自己也没啥感受,二叉树的内容上学期已经学了,而且经常用,所以我觉得挺简单的。知识向量好久没用了,有些知识点还是不懂,但有不懂的知识点一定要问别人或者上网解决,尤其是编程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: