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;
}
注意事项:这道题也不算太难,重点就是注意建立二叉树的递归,以及明白如何截取一个向量数组的一部分值给另一个向量数组。然后进行简单的递归,也要注意正确取到根节点的值,一个判断数组是否为空。
个人感受:我自己也没啥感受,二叉树的内容上学期已经学了,而且经常用,所以我觉得挺简单的。知识向量好久没用了,有些知识点还是不懂,但有不懂的知识点一定要问别人或者上网解决,尤其是编程。
- Lintcode-递归-177 把排序数组转换为高度最小的二叉搜索树
- lintcode-把排序数组转换为高度最小的二叉搜索树-177
- lintCode(177)——把排序数组转换为高度最小的二叉搜索树
- LintCode 177-把排序数组转换为高度最小的二叉搜索树
- [LintCode 177] 把排序数组转换为高度最小的二叉搜索树(Python)
- LintCode SortedArrayToBST 把排序数组转换为高度最小的二叉搜索树
- 把排序数组转换为高度最小的二叉搜索树(LintCode)
- LintCode:把排序数组转换为高度最小的二叉搜索树
- LintCode:把排序数组转换为高度最小的二叉搜索树
- lintcode,把排序数组转换为高度最小的二叉搜索树
- LintCode | 177. 把排序数组转换为高度最小的二叉搜索树
- LintCode 把排序数组转换为高度最小的二叉搜索树
- 把排序数组转换为高度最小的二叉搜索树-LintCode
- lintcode——把排序数组转换为高度最小的二叉搜索树
- lintcode把排序数组转换为高度最小的二叉搜索树
- LintCode-把排序数组转换为高度最小的二叉搜索树
- lintcode 把排序数组转换为高度最小的二叉搜索树
- LintCode 把排序数组转换为高度最小的二叉搜索树
- 文件IO操作
- js入门:建立一个图片库
- UVa 227 Puzzle
- Dom对象与jQuery对象的区别
- 杭电OJ_(2047)阿牛的EOF牛肉串
- Lintcode-递归-177 把排序数组转换为高度最小的二叉搜索树
- 交错序列
- MFC学习笔记-串口通信
- poj 4115:鸣人和佐助
- Qt5 文件编码
- 系统地讲述Cookie与Session机制
- 三重循环寻找最长连续字符串相加和为K值倍数的长度
- Leetcode 289. Game of Life
- SpringMVC学习(六)-自定义类型转换器