所谓全排列就是将一个数据组合拆开重新排列,比如 abc,可重新排序为 acb、bac、bca、cab、cba,通过算法上实现一般就是递归或一个while循环来实现。最近复习算法方面的内容接触到的新的算法,记录一下思路。

继续阅读

arguments.callee 的功能是在函数内部调用函数自身,相当于递归的作用,我开始接触它的时候发现,这个东西没有什么实际意义吧,在函数内部调用自身名字就好了,干嘛还要定义这么一个方法?当然存在即是合理,我们看下面的例子。继续阅读

前面我们记录下来的文章都是手动创建的树,我们还从未尝试过将一组数据动态的在内存中构建成为一棵树。本文将详细介绍使用#号创建法动态的在内存中创建树的详细步骤。当然动态创建树并非就这么一种办法,我们记录的是最常用而且是最方便的方法。

继续阅读

树使用递归遍历非常方便,如果将代码拉伸开来,我们能否是否非递归代码来实现呢?当然是可以的,我们只要把递归的循环步骤修改为while就可以了。但我们需要借用到STL的栈模型来实现这个需求,具体的步骤如下:

继续阅读

二叉树的高度就是从根节点到最深的叶子节点之间的节点数,计算方法使用递归时,判断如果到了树的叶子节点那么就返回0。依次遍历左侧和右侧节点的数量,然后求出最大值再算上当前根节点的数量+1,递归循环返回后得出最终的结果。代码如下:

继续阅读

二叉树拷贝也相对简单,我们只需要在遍历的过程中,将每一个有效的节点依次给传递进来的新树的节点衔接起来就可以了。大致的思路我们可以总结一下。

继续阅读

这个题目作为一个小练习,让我们对树的概念进一步的掌握,其实思路非常简单,在遍历树的过程中,计算某个节点如果leftChile和rightChild都指向NULL,那么证明其就是一个叶子节点,我们对引用计数加一就可以了。具体代码如下:

继续阅读

树的遍历分很多种,经过前人总结,树的遍历其实一共就有三种方法,一种为先序遍历、一种为中序遍历、最后一种为后续遍历。他们不同的区别就是在遍历过程中查找树的根、左节点、右节点的顺序,同样由于遍历树惯用递归的方式,所以所谓的查找顺序不同就是在递归过程中打印节点数据时的代码位置不同而已,如果这句话你看的比较绕,那么在后面的代码中你将会恍然大悟。不过再看代码之前,你还是要记住下面的顺序。

继续阅读

逆置字符串是将字符串所有字符前后颠倒,有比较常见的两种思路,第一种是生成两个分别指向头和尾的指针,遍历字符串交换头尾指针,然后对头尾指针向字符串中间移动,最终得出交换结果。另外一种思路则是后续递归的方式。以字符串结束\0为递归终止条件,再调用自身函数后打印每一个字符即可逆置显示一个字符串。继续阅读

二分查找的前提是数据一定要有序,否则一切皆为空谈。通过有序的一段数据使用二分查找较常规遍历查找算法速度要快一些。其中二分查找发有两种实现,一种为常规while循环,另外一种为递归。具体的实现步骤如下:继续阅读