- 博客(5)
- 收藏
- 关注
原创 小结(1月31日)
从上文的遍历理论可以发现,前序、中序、后序遍历都是对左右子树进行同样的遍历过程,这与递归自我调用的理念不谋而合,于是我们自然而然的想到使用递归实现前序、中序、后序遍历。下面我们结合代码讲解。层序遍历与前序、中序、后序遍历不同,并不使用栈的方式实现,因为其按从左到右的顺序遍历,同时先遍历的先访问。同时,众所周知,递归的底层是利用栈实现,所以,我们也可以通过栈来实现前序、中序、后序遍历,但我们此文章对此不作讨论。1.前序遍历:由根结点开始,先访问根结点,然后前序遍历左子树,再前序遍历右子树(中左右)
2024-01-31 15:42:01
1070
原创 小结(1月28日)
栈有后进先出的性质,那是不是最先进栈的元素只能最后出栈呢?答案是否定的。例如,一个入栈顺序:1 2 3的栈,它的出栈顺序有多种情况:1.1,2,3进,3,2,1出,出栈顺序为3,2,1;2.1,2进,2出,3进,1,3出,出栈顺序为2,3,1;3.1进,1出,2进,2出,3进,3出,出栈顺序为1,2,3;4.1进,1出,2,3进,2,3出,出栈顺序为1,3,2;5.1,2进,1,2出,3进,3出,出栈顺序为2,1,3;究其原因,栈的操作只限制空间上的后进先出,而对出入栈时间并未做要求。
2024-01-28 20:25:21
1677
原创 小结(1月30日)
当 S[i] 和 T[j] 不匹配时,如果 j 不是0,则将 j 更新为 next[j-1] 的值,这是KMP算法的核心,通过部分匹配表跳过已知不匹配的部分。此时打印匹配的起始位置(i-lenT+1),然后将 j 更新为 next[j-1]继续匹配直到变量i遍历完主串,循环结束。此代码将i定为后缀的开始,j定为前缀的开始,通过遍历比较前后缀是否相等来确认next数组的值,如果相等则增加j值,如果不等则依据上一个next数组的值跳转J的位置,如果j已在开头则结束此循环,i++。
2023-12-17 23:53:13
410
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人