对于二叉树的三种遍历方式,它们的难易程度是不一样的,最简单的是先序遍历,其次是中序遍历,最难的是后序遍历方式。但是最难的后序遍历方式,却可以通过最简单的先序遍历方式的变形实现,然后把遍历的结果逆序一下就搞定了。哈哈,物极必反啊!先看一个最简单的后序的遍历方法的实现,利用先序遍历方式的变形,然后逆序v...
分类:
编程语言 时间:
2015-07-25 18:23:55
阅读次数:
219
这几天在复习关于树的各种算法,做了一些题,也搜索了网上各种算法,现在来总结一下树的各种常见算法。本文涵盖:二叉树先中后序遍历(递归&非递归)算法层次遍历(正序&逆序&锯齿形)非递归算法二叉树深度算法结点总数算法1.二叉树先序非递归遍历//先序非递归遍历 public ArrayList pre...
分类:
编程语言 时间:
2015-07-23 23:16:59
阅读次数:
253
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。平衡二叉检索树使用中序遍历算法,检索效率高于vector、...
分类:
编程语言 时间:
2015-07-20 12:34:09
阅读次数:
146
遍历算法的访问路径是相同的,只是访问结点的时机不同...
分类:
其他好文 时间:
2015-07-19 10:19:16
阅读次数:
162
思想:用path数组存放路径(初始为空),d表示路径长度(初始为-1),查找从顶点u到v的最短路径过程如图所示:
对应算法如下:
void FindPath(AGraph *G,int u,int v,int path[ ],int d)
{
in...
分类:
编程语言 时间:
2015-07-18 14:12:20
阅读次数:
174
思想:图G是不带权的无向连通图,一条边的长度计为1,因此,求带顶点u和顶点v的最短的路径即求顶点u和顶点v的边数最少的顶点序列。利用广度优先遍历算法,从u出发进行广度遍历,类似于从顶点u出发一层一层地向外扩展,当第一次找到顶点v时队列中便包含了从顶点u到顶点v最近的路径,如图所示,再利用队列输出最路径(逆路径),所以设计成非循环队列。
...
分类:
编程语言 时间:
2015-07-18 12:40:05
阅读次数:
358
思想:图G是不带权的无向连通图,一条边的长度为1,因此,求距离顶点v的最远的顶点,即求距离顶点v的边数最多的顶点。利用广度优先遍历算法,从v出发进行广度遍历,类似于从顶点v出发一层层地向外扩展,到达j, …,最后到达的一个顶点k即为距离v最远的顶点。遍历时利用队列逐层暂存各个顶点,最后出队的一个顶点k即为所求。如图所示:
对...
分类:
编程语言 时间:
2015-07-18 11:04:50
阅读次数:
444
在上一篇中,我们了解了树的基本概念以及二叉树的基本特点和代码实现,还用递归的方式对二叉树的三种遍历算法进行了代码实现。但是,由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。因此,我们使用非递归(这里主要是循环,循环方法比递归方法快, 因为循环避免了一...
分类:
其他好文 时间:
2015-07-14 06:04:48
阅读次数:
207
通过demo演示了STL中的常用遍历算法for_each和transform的基本使用,然后通过追踪源码得到for_each和transform的本质区别(对函数对象参数的要求)...
分类:
编程语言 时间:
2015-07-10 15:16:50
阅读次数:
173
思想:根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求:
●某节点没有左孩子,则一定无右孩子
●若某节点缺左或右孩子,则其所有后继一定无孩子
若不满足上述任何一条,均不为完全二叉树。
算法思路:采用层序遍历算法,用cm变量值表示迄今为止二叉树为完全二叉树(其初值为1,一旦发现不满足上述条件之一,则置cm为0),bj变量值表示迄今为止所有节点均...
分类:
编程语言 时间:
2015-07-08 02:07:38
阅读次数:
298