题目:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
思路:从一个数组中找到中间的元素作为BST的根,然后坐边的作为左子树,右边的作为右子树,递归调用
#include
#include
#include
#include
...
分类:
其他好文 时间:
2015-04-04 12:18:29
阅读次数:
132
思路:
1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找
2.递归选取前序序列的第一个元素作为树的根节点,然后查找根节点在前序序列中位置inorderIndex,inorderIndex-startInorder可以得到左子树的长度
3.根据左子树的长度和startPreOrder可以求出前序序列中左子树的起始位置
4.从上面可以求出左右子树的前序序列和中序序列的起始位置,递归调用建树过程即可。
PS:其实,对于这道题,有更简单的方法,可根据按前序序列元素出现的顺序依次作为树的根节点进行...
分类:
其他好文 时间:
2015-04-03 15:17:20
阅读次数:
133
思路:
1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找
2.递归选取后序序列的倒数第一个元素作为树的根节点,然后查找根节点在后序序列中位置inorderIndex,endInorder-inorderIndex可以得到右子树的长度
3.根据右子树的长度和endPreOrder可以求出后序序列中右子树的起始位置
4.从上面可以求出左右子树的后序序列和中序序列的起始位置,递归调用建树过程即可。...
分类:
其他好文 时间:
2015-04-03 15:16:31
阅读次数:
89
本不该做阿里的笔试题的。说好的安心工作呢。不得不说阿里的笔试题确实不错,时隔一年我确实有长进。但是还是没有达到阿里巴巴入职的水平。。。(此处省略一百字)。临提交之前就关掉浏览器了,时间来不及,水平有限,关了之后就把其中的一个题做出来了,虽然用了5分钟而已。。。那个题是考察递归调用的,就是把一个多维数组传入一个函数,使其结果都展开,变成一个一维数组。其实挺简单的一个题目。不废话了,直接上代码:<scr...
分类:
Web程序 时间:
2015-04-01 09:41:06
阅读次数:
172
题目:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
思路:根据前序和中序的特点 递归调用创建二叉树
#include
#include
u...
分类:
其他好文 时间:
2015-03-30 11:26:36
阅读次数:
122
归并操作:是将两个有序独立的文件合并成为一个有序文件的过程。
归并排序:和快速排序的过程相反,它是两个递归调用(排序子文件)后是一个归并的过程。
快速排序时,先分解成两个子问题后是两个递归调用(排序子文件)的过程。归并操作
1 基本的两路归并
2 抽象原位归并
归并排序
1 自顶向下的归并排序
2 自底向上的归并排序
3 归并排序的性能特征
归并排序的链表实现
归并排序与快速排序对比
1. 归并...
分类:
编程语言 时间:
2015-03-30 09:36:46
阅读次数:
250
递归调用非递归调用
运行时间比较
结论
位运算与乘除法
结论递归调用/非递归调用我们都知道,很多算法,都是用递归实现的。当然它们同时也是可以用非递归来实现。一般我们在对二叉树进行遍历的时候,还有求斐波那契数的时候,递归是非常简单的。代码容易懂,好实现。但是递归的时候,有一个问题,就是需要压栈。为什么要压栈呢?因为当我在函数内部调用自身的时候,要中断当前的操作继续跳转到下一次的实现,而当前运行的状态要...
分类:
编程语言 时间:
2015-03-28 21:52:18
阅读次数:
229
欧几里得算法欧几里得算法也叫辗转相除法,是求两个整数最大公约数的算法。当然也可以求最小公倍数。算法实现其实算法的实现原理就是,有整数a b两个,每次求的一个数字r = a % b,然后把b放到a的位置,把r放到b的位置,递归调用。就是gcd(a, b) { return gcd(b, a%b); }这个样子的。结束条件是当 a%b == 0的时候停止。最大公约数//
// main.cpp
//...
分类:
编程语言 时间:
2015-03-28 01:13:58
阅读次数:
243
用递归遍历的优点是算法简单明了,缺点也十分明显:对于栈的消耗比较大。尤其是在嵌入式应用中,嵌入式处理器资源往往有限。每次递归调用,都会涉及到通用寄存器、SP指针、PC指针等的压栈。当树的深度比较大时,对于栈的消耗会变得非常严重,很有可能造成栈的溢出。
因此,二叉树的非递归遍历方法就显得非常有实际应用价值。下面是非递归遍历的算法,这里使用了数据结构栈,利用其先进后出的特点,用结点入栈出栈过程手工模拟递归调用过程中的栈操作。...
分类:
编程语言 时间:
2015-03-21 09:53:45
阅读次数:
264