![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
这是很长很好的一生
计算机专业研究生
展开
-
利用DFS实现无环图拓扑排序
若节点u是v的祖先,则在调用DFS访问u的过程中,必然会递归访问v,并且v的DFS函数结束时间早于u的DFS函数结束时间。若u是v的子孙,则v的结束时间一定大于u的结束时间。若是其他关系则在拓扑排序中的顺序随意。则可以考虑在DFS调用的过程中设定一个时间标记,在DFS调用结束时,对各个节点计时,祖先节点的结束时间必然大于子孙节点的结束时间。从而按照结束时间排序,可以得到一个拓扑排序。对于有向无环图的任意节点u,v,它们之间的关系必然是祖先与子孙节点或者其他关系。...原创 2022-08-15 15:16:28 · 1033 阅读 · 2 评论 -
图的深度优先搜索的非递归算法
使用一个栈来记忆下一步可能访问的节点,同时使用一个访问标记数组visited来记忆第i个顶点是否在栈内或者曾经在栈内,若是则它以后不再进栈,图采用邻接表的形式存储。原创 2022-08-12 16:52:19 · 2682 阅读 · 4 评论 -
跳表的学习
我们用数组update保存每一层查找的最后一个节点,第i层最后的节点为update[i]。由于第i层的以pp的概率出现在第i+1层,因此我们应当从第1层开始往上进行更新,将num从update[i]的下一跳中删除,同时更新update[i]的后续节点,直到当前层的链表中没有出现num的节点为止。add从跳表的当前的最大层数level层开始查找,在当前层水平地逐个比较直至当前节点的下一个节点大于等于目标节点,然后移动至下一层进行查找,重复这个过程直至到达第1层。...转载 2022-07-26 10:40:13 · 124 阅读 · 0 评论 -
完全二叉树插入器
定义完全二叉树数据类型,定义一个二叉树指针类型的数组用来模拟队列,再定义一个top指向队首,在初始化完全二叉树时找到第一个没有左子树或者右子树的节点,用top记录下他的位置,此后每次插入,插入top指向的节点缺少的部分,再判断节点是否完整了,若完整则将top+1,rear指向队列中最后一个节点,每次新插入的节点入队至rear后面的位置。那么,只有倒数第二层(如果存在)最右侧的若干个节点,以及最后一层的全部节点可以再添加子节点,其余的节点都已经拥有两个子节点。这是LeetCode上的一道题目。...原创 2022-07-25 10:51:27 · 181 阅读 · 0 评论 -
非递归算法求二叉树的高度
采用层次遍历的算法,设置变量level记录当前节点所在的层数,设置变量last指向当前层最右边的节点,每次层次遍历出队时与last指针作比较,若两者相等,则层数+1,并让last指向下一层的最右节点,直到遍历完成。level即为二叉树的高度。...原创 2022-07-23 16:13:18 · 2732 阅读 · 2 评论 -
二叉树的后序遍历的非递归实现算法
栈顶D的右孩子为空,出栈并访问,此时栈顶元素为B,有右孩子且未被访问过,将E入栈,E没有右孩子,访问并出栈,此时B的右孩子已经被访问过了,访问B并出栈,此时的栈顶元素A不空且没有被访问过,CF入栈,F的右孩子为空,访问并出栈,C的右孩子不为空,G入栈,G没有右孩子,访问G并出栈,此时C的右孩子已经被访问,访问C并出栈。最后访问A节点,栈为空,结束遍历。2.读取栈顶元素,若其右孩子不为空且从来没有被访问过,将右子树执行步骤1,否则弹出栈顶元素并访问。1.沿着根的左孩子,依次入栈,直到左孩子为空。...原创 2022-07-23 15:51:50 · 760 阅读 · 0 评论 -
差分数组的学习
当我们需要更新区间[l,r]时候(仅指加减运算),我们仅仅可以只更新d[l]+=x,d[r+1]-=x;原创 2022-07-19 11:50:00 · 120 阅读 · 0 评论 -
字典树学习 根据前缀词根建立字典树
一.字典树概念字典树又被称作Trie树,其效率非常高,所以在字符串查找,前缀匹配中应用非常广泛,其高效率是以空间为代价的。典型应用是用于统计和排序大量的字符串,它的优点是,最大限度地减少无谓的字符串比较,查询效率比哈希表更高。 例题...原创 2022-07-07 21:40:21 · 228 阅读 · 0 评论