1. 中序遍历的实现
将根节点的所有左节点依次入栈。
当没有左节点时,出栈,一个节点,将他的所有的左节点入栈。
2. 层次遍历
将二叉树的根节点入队,然后出队,访问该节点。
若他有左子树,则将左子树的根节点入队;
若他有右子树,则将右子树的根节点入队。
3. 平衡二叉树用途
平衡二叉树主要优点集中在快速查找。在二叉排序树中,插入和删除的运行时间都是O(h),如果输入序列已经排序,则时间复杂度为O(N)。
4. 哈夫曼树的用途
哈夫曼(Huffman)树又称作最优二叉树,它是n个带权叶子结点构成的所有二叉树中,带权路径长度最小的二叉树。
 哈夫曼编码
在数据通信中,需要将传送的文字转换为二进制的字符串。第一遍统计原数据中各字符出现的频率,利用得到的频率值创建哈夫曼树,并必须把树的信息保存起来。第二遍则根据第一遍扫描得到的哈夫曼树进行编码,并把编码后得到的码字存储起来。
5. 哈夫曼编码有什么意义?
1.任何一个字符编码,都不是其他字符编码的前缀。
2.信息编码的总长度最小。减少了数据传输的数量
6. 数据结构图中广度优先遍历用什么来实现?
队列
图的存储方法:
邻接矩阵
邻接表
十字链表
邻接多重表
图的广度优先过程和二叉树的层次遍历算法完全一致。
7. 数据结构中最小生成树的应用
生成树:一个连通图的生成树是图的极小连通子图
最小生成树:在带权生成树中,包含所有的顶点,并且权值之和最小。
要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。
8. 最小生成树的算法
Prim算法:面试数据结构 不依赖边,适合边稠密
1.1 添加任意一个顶点
1.2 找到此顶点最小的边添加顶点
1.3 直到添加所有的顶点
Kruskal算法:用堆来存储边的权值。

1.1 每个顶点构成一棵独立的树
1.2 按照边的权值,递增排序,选择一条边,加入后不构成回路,则加入
1.3 直到添加了n-1条边
9. 最短路径的思路
两点之间的最短路径也包含了路径上其他顶点之间的最短路径长度。
10. 最短路径算法有哪些
广度优先算法(单源最短路径 无权值)
Dijkstra算法(单源最短路径 有权值) 面试数据结构
1.1 有向图的邻接矩阵
1.2 顶点数组 距离数组
1.3 找到最短的路径添加进去,点也添加进去,对路径更新
面试数据结构
Floyd算法(每对顶点之间的最短路径):逐渐添加点
11. 顺序查找中哨兵的作用
在顺序查找中,在数组的都一个元素设置为查找元素,然后倒序查找,引入的它的目的是,不用判断数组是否会越界,可以避免很多不必要的判断语句,从而提高程序的效率。
顺序表 链式存储
12. B树的应用
B树大量应用在数据库和文件系统当中。它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。B树算法减少定位记录时所经历的中间过程,从而加快存取速度。mongoDB数据库。
13. B+是树的应用
mysql使用B+树作为索引
1.1 非叶子节点不存储数据,节点小,磁盘IO次数就少。
1.2 B+树的所有Data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节用指针串联起来,遍历叶子节点就能获取全部数据,这样就能进行区间访问了。
14. 冒泡排序最坏情况下和最好情况下的时间复杂度?
1.1 最好情况下的时间复杂度:如果元素本来就是有序的,那么一趟冒泡排序既可以完成排序工作,比较和移动元素的次数分别是n-1和0,因此最好情况的时间复杂度为O(n)。
1.2 最差情况的时间复杂度:如果数据元素本来就是逆序的,许哟啊进行n-1趟排序,所需比较和移动次数分别为n(n-1)/2和3n(n-1)/2。因此最坏情况子下的时间复杂度为O(n^2)。
15. 最快排序为什么叫最快排序?
面试数据结构
面试数据结构
有实验证明,相同的数据规模,快速排序比堆排序的效率高很多。快速排序的时间复杂度近似线性增长,堆排序则要大很多。
在堆排序(小根堆)的时候,每次总是将最小的元素移除,然后将最后的元素放到堆顶,再让其自我调整。在堆排序里面有大量这种近乎无效的比较。
堆排序中需要随机存取,在大规模的数据中对数组指针的寻址也需要一定的时间,而快速排序只需要移动到相邻区域即可。
在快速排序中,每次数据的移动意味着数据距离他正确的位置越来越近,而在堆排序中,将堆尾部的数据移到堆顶这样的操作只会使相应的数据远离它正确的位置。
16. 数据结构中什么地方用到了递归?
例如:求阶乘;汉诺塔 树的遍历

相关文章: