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

Continue reading

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

Continue reading

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

Continue reading

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

Continue reading

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

Continue reading

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

Continue reading

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