*二叉树
前序遍历使用递归:1.打印根节点2.递归遍历左子树3.遍历右子树(递归结束条件:该节点不存在)
中序遍历使用递归:1.递归遍历左子树2.打印根节点3.遍历右子树(递归结束条件:该节点不存在)
后序遍历使用递归:1.递归遍历左子树2.打印根节点3.遍历右子树(递归结束条件:该节点不存在)
***线索二叉树
我们对二叉树以某种次序遍历使其变为线索二叉树的过程称为线索化。相当于把一个二叉树转换为一个双向链表
***赫夫曼树(带权路径长度最小的树)
压缩文件:使用赫夫曼编码(左侧为0,右侧为1)
*图
*****邻接矩阵
*****邻接表(和孩子表示法一样。用一维数组存储顶点,每个顶点的所有邻接点用单链表存储)
两者区别:
对于一个具有n个顶点e条边的无向图
它的邻接表表示有n个顶点表结点2e个边表结点
对于一个具有n个顶点e条边的有向图
它的邻接表表示有n个顶点表结点e个边表结点
如果图中边的数目远远小于n2称作稀疏图,这是用邻接表表示比用邻接矩阵表示节省空间;
如果图中边的数目接近于n2,对于无向图接近于n*(n-1)称作稠密图,考虑到邻接表中要附加链域,采用邻接矩阵表示法为宜。
*****深度优先DFS
*****广度优先BFS
**最小生成树(村庄架设通信网络)
(1)prim算法:先找一个顶点(随意)放入最小生成树u中,不停然后找剩余顶点中到u中顶点权值最小的顶点纳入u中,时间复杂度:O(n2)
(2)kruskal算法:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止,时间复杂度:O(eloge),e为边数
https://www.cnblogs.com/skywang12345/p/3711496.html
**最短路径(两点之间的最短)
(1)迪杰斯特拉算法:一步一步求出它们之间顶点的最短路径,然后求得更远顶点的最短路径。 O(n3)
(2)弗洛伊德算法:他每次都会选择一个中介点,然后,遍历整个矩阵,查找需要更新的值。 O(n3);用于求所有顶点到所有顶点的最短路径问题。
https://blog.csdn.net/qq_35644234/article/details/60875818