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

来源:互联网 发布:网络融资平台靠谱吗 编辑:程序博客网 时间:2024/05/18 03:26
点此进入题目

解题思路:首先这道题是建立二叉树的题,建立二叉树基本上就是递归最简单了,所以这道题要用递归。根据样例可以知道,给一个数组[1,2,3,4,5,6,7],然后将中间的数4作为树的根节点,然后4左边的数组作为左子树,4右边的数组作为左子树,然后进行递归。递归结束的条件就是数组为空。

解题过程:得到一个a[n]的数组,如果n是奇数的话,然后去取mid=1+n/2位置的值,若n是偶数的话,取mid=n/2位置的值。新建一个树,根是a[mid]。该树的左子树的数组是从a[1]a[mid-1],左子树是a[mid+1]a[n]。然后进行递归,直到数组为空。

以下是代码实现:

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;

}

注意事项:这道题也不算太难,重点就是注意建立二叉树的递归,以及明白如何截取一个向量数组的一部分值给另一个向量数组。然后进行简单的递归,也要注意正确取到根节点的值,一个判断数组是否为空。

个人感受:我自己也没啥感受,二叉树的内容上学期已经学了,而且经常用,所以我觉得挺简单的。知识向量好久没用了,有些知识点还是不懂,但有不懂的知识点一定要问别人或者上网解决,尤其是编程。

阅读全文
0 0
原创粉丝点击