![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
白话算法
文章平均质量分 51
若呓
一个致力于分布式数据库内核的小白,最近在钻研算法和扩展知识广度,暂时随手博客更新于此,希望能帮助到你,也希望大家和我一起交流。
展开
-
白话算法新序
其部分章节还具有一些子问题,在写到的时候会进行具体分析。老规矩,算法还是旨在最简洁,最白话的语言解决问题。原创 2023-12-04 10:02:50 · 342 阅读 · 0 评论 -
4-字典树-数组中两个数的最大异或值
最大运算结果是 5 XOR 25 = 28.这是字典树的第4篇算法,的最大运算结果,其中。原创 2024-03-05 10:18:08 · 410 阅读 · 0 评论 -
3-字典树-单词搜索 II
内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。单词必须按照字母顺序,通过。和一个单词(字符串)列表。这是字典树的第3篇算法,返回所有二维网格上的单词。原创 2024-03-05 10:12:16 · 435 阅读 · 0 评论 -
2-字典树-添加与搜索单词 - 数据结构设计
请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配。和上一篇算法其实没什么比较大的区别。这是字典树的第二篇算法,原创 2024-03-04 10:38:43 · 404 阅读 · 0 评论 -
1-字典树-实现 Trie (前缀树)
是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。// 返回 False。// 返回 True。// 返回 True。// 返回 True。这道题比较简单,其实就是多维数组的灵活运用。(发音类似 "try")或者说。这是字典树的第一篇算法,原创 2024-03-04 10:32:59 · 457 阅读 · 0 评论 -
33-树-奇偶树
由于 0 层和 2 层上的节点值都是奇数且严格递增,而 1 层和 3 层上的节点值都是偶数且严格递减,因此这是一棵奇偶树。如果一棵二叉树满足下述几个条件,则可以称为。给你二叉树的根节点,如果二叉树为。3 层:[12,8,6,2]这是树的第33篇算法,2 层:[3,7,9]1 层:[10,4]原创 2024-03-01 10:50:49 · 372 阅读 · 0 评论 -
32-树-在每个树行中找最大值
请找出该二叉树中每一层的最大值。给定一棵二叉树的根节点。这是树的第32篇算法,原创 2024-03-01 10:03:45 · 356 阅读 · 0 评论 -
31-树-找树左下角的值
拿到这道题的第一想法,我可以层级遍历选取最左节点。假设二叉树中至少有一个节点。这是树的第31篇算法,原创 2024-02-29 16:36:37 · 364 阅读 · 0 评论 -
30-树-二叉搜索树中的众数
思路可以试试先前序遍历将数字计数,然后遍历map取出来放入到result里面。当然,也可以中序遍历获取有序数组,然后处理数字的方式找众数。给你一个含重复值的二叉搜索树(BST)的根节点。,找出并返回 BST 中的所有。如果树中有不止一个众数,可以按。(即,出现频率最高的元素)。这是树的第30篇算法,原创 2024-02-29 16:27:09 · 364 阅读 · 0 评论 -
29-树-删除二叉搜索树中的节点
对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。另一个正确答案是 [5,2,6,null,4,null,7]。给定一个二叉搜索树的根节点。这是树的第29篇算法,,删除二叉搜索树中的。原创 2024-02-28 10:42:54 · 307 阅读 · 0 评论 -
28-树-N 叉树的层序遍历
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。给定一个 N 叉树,返回其节点值的。(即从左到右,逐层遍历)。这是树的第28篇算法,原创 2024-02-28 10:34:32 · 366 阅读 · 0 评论 -
27-树-左叶子之和
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。,返回所有左叶子之和。这是树的第27篇算法,原创 2024-02-27 10:49:53 · 358 阅读 · 0 评论 -
26-树-二叉搜索树中第K小的元素
注意到这里时要进行排序的,我们不如直接用中序遍历,这样返回的就是有序数组。,请你设计一个算法查找其中第。个最小元素(从 1 开始计数)。给定一个二叉搜索树的根节点。这是树的第26篇算法,原创 2024-02-27 10:40:27 · 344 阅读 · 0 评论 -
1-树-验证二叉搜索树
终于开启了树的篇章,这是我数据库领域经常用到的算法,这是第一篇,。给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。true我认为,只有右子叶大于根节点,左子叶小于根节点就行,其实不是。这里的要求二叉树是左树都得比根节点小,右树都得比根节点大。所以这里的递归可能不是和当前节点比左右叶子结点,而是根最大最小的边界比根节点。当然,递归可以做的迭代也能搞。我们把树封装进数组,进行中序遍历,大概逻辑就是将左节点放入栈中,一个一个取出和父节点比较大小。原创 2024-01-31 16:06:54 · 1423 阅读 · 0 评论 -
2-树-恢复二叉搜索树
这是树的第二篇算法,。给你二叉搜索树的根节点root,该树中的两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树。3 不能是 1 的左孩子,因为 3 > 1。交换 1 和 3 使二叉搜索树有效。2 不能在 3 的右子树中,因为 2 < 3。交换 2 和 3 使二叉搜索树有效。原创 2024-02-01 15:50:52 · 830 阅读 · 0 评论 -
3-树-相同的树
现在的做法是模拟stack的做法,后入先出的方法遍历这棵树,当然也可以模拟queue,先入先出,这就成了广度优先遍历的逻辑。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。这道题最简单的做法就是递归,也就是传说中的深度优先遍历。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。这是树的第3篇算法,原创 2024-02-01 16:16:02 · 337 阅读 · 0 评论 -
4-树-对称二叉树
这道题最简单的思路是递归,左子叶要和右子叶比较来判断对称性。给你一个二叉树的根节点。, 检查它是否轴对称。这是树的第4篇算法,原创 2024-02-02 11:51:10 · 368 阅读 · 0 评论 -
5-树-二叉树的层序遍历
(即逐层地,从左到右访问所有节点)。这是树的第5篇算法,原创 2024-02-02 15:02:12 · 347 阅读 · 0 评论 -
6-树-二叉树的层序遍历 II
这道题和上一道题的区别是从底向上,那我们层级遍历的逻辑就要改成栈的逻辑存储数据。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)还有一种是让数组在最后统一异动len(result)个单位。这是树的第7篇算法,原创 2024-02-04 11:00:14 · 383 阅读 · 0 评论 -
7-树-二叉树的锯齿形层序遍历
这道题本质还是基础的层级遍历,不过唯一不同的是需要将奇数位的subQuery翻转一下。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。这是树的第7篇算法,原创 2024-02-04 11:19:48 · 373 阅读 · 0 评论 -
8-树-二叉树的最大深度
这道题还是可以用层级遍历来解,每一层count++即可。是指从根节点到最远叶子节点的最长路径上的节点数。迭代的方法也能做,不过要构建新对象记录深度。这是树的第8篇算法,原创 2024-02-05 10:17:13 · 350 阅读 · 0 评论 -
9-树-从前序与中序遍历序列构造二叉树
这是树的第9篇算法,。给定两个整数数组preorder和inorder,其中preorder是二叉树的inorder是同一棵树的,请构造二叉树并返回其根节点。原创 2024-02-05 11:06:04 · 376 阅读 · 0 评论 -
10-树-从中序与后序遍历序列构造二叉树
这道题和上一篇算法的前序遍历类似,这不过这里的后序遍历涉及到一定的逆逻辑,例如根节点是最后一个节点,右子树的范围到 len(postorder)-1-len(inorder[index+1:])对于二叉搜索树(BST),中序遍历会按照升序访问所有节点,因为二叉搜索树的特点是左子节点的值小于根节点的值,根节点的值小于右子节点的值。后序遍历常用于删除或释放树中的节点。因为你在删除节点之前先访问其子节点,这样可以安全地删除每个节点。是同一棵树的后序遍历,请你构造并返回这颗。是二叉树的中序遍历,原创 2024-02-07 08:49:43 · 379 阅读 · 0 评论 -
11-树-将有序数组转换为二叉搜索树
二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。排列,请你将其转换为一棵。这是树的第11篇算法,原创 2024-02-06 10:51:23 · 343 阅读 · 0 评论 -
12-树-有序链表转换二叉搜索树
一个可能的答案是[0,-3,9,-10,null,5],它表示所示的高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树。,将其转换为高度平衡的二叉搜索树。的左右两个子树的高度差不超过 1。给定一个单链表的头节点。这是树的第12篇算法,原创 2024-02-07 09:10:20 · 407 阅读 · 0 评论 -
13-树-平衡二叉树
平衡二叉树的判断标准是以根节点为起点,判断左右子树的高度,高度在1及以内就平衡,不在1及以内就不平衡。给定一个二叉树,判断它是否是高度平衡的二叉树。的左右两个子树的高度差的绝对值不超过 1。感觉这种思路天然的适合递归来搞。这是树的第13篇算法,原创 2024-02-07 09:32:03 · 355 阅读 · 0 评论 -
14-树-二叉树的最小深度
当然,递归的操作也可以搞,这里值得注意的是,当左右子叶有一个为空并不代表是最小深度,需要将不为空的一边+1返回,这里为了减少判断,直接返回left+right+1了。最常规的做法就是层级遍历,当左右子叶都为空跳出当前层级高度就可以了。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。给定一个二叉树,找出其最小深度。叶子节点是指没有子节点的节点。这是树的第14篇算法,原创 2024-02-18 10:16:16 · 367 阅读 · 0 评论 -
15-树-路径总和
这是树的第15篇算法,。给你二叉树的根节点root和一个表示目标和的整数targetSum。判断该树中是否存在的路径,这条路径上所有节点值相加等于目标和targetSum。如果存在,返回true;否则,返回false。是指没有子节点的节点。true等于目标和的根节点到叶节点路径如上图所示。原创 2024-02-18 11:05:11 · 315 阅读 · 0 评论 -
16-树-路径总和 II
比较上一节返回布尔值就可以了,这回可能复杂一点,我们需要额外存储路径信息,不过其实还好,我们增加一个空间来存储每次遍历的路径就好。路径总和等于给定目标和的路径。是指没有子节点的节点。这是树的第16篇算法,原创 2024-02-19 10:36:16 · 365 阅读 · 0 评论 -
17-树-二叉树展开为链表
看结果的输出结果是标准的前序遍历的顺序,在处理的过程中,我们需要断开节点的左孩子,并将右孩子(如果存在)连接到前一个节点的右侧。这是树的第17篇算法,原创 2024-02-19 10:47:13 · 347 阅读 · 0 评论 -
18-树-填充每个节点的下一个右侧节点指针
给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为。无非是一层一层的遍历所有的节点,然后将前一个节点与后一个节点绑定。,其所有叶子节点都在同一层,每个父节点都有两个子节点。第二个做法比较特别,一只选取最左节点,将其子节点的左节点连上右节点。原创 2024-02-20 10:19:19 · 350 阅读 · 0 评论 -
20-树-求根节点到叶节点数字之和
首先广度/层级遍历肯定能解决这个问题,我们随着遍历的过程带着路径信息,当到达子叶时进行累加操作。自然,深度优先遍历(前序遍历)也能解决这个问题。从根到叶子节点路径 1->2 代表数字 12。从根到叶子节点路径 1->3 代表数字 13。因此,数字总和 = 12 + 13 = 25。,树中每个节点都存放有一个。计算从根节点到叶节点生成的。给你一个二叉树的根节点。是指没有子节点的节点。这是树的第20篇算法,原创 2024-02-22 11:27:58 · 332 阅读 · 0 评论 -
21-树-二叉树的前序遍历
这是树的第11篇算法,。给你二叉树的根节点root,返回它节点值的遍历。[1,2,3]做了这么久的树问题,现在开始回忆三种遍历方法,这篇文章回忆的是前序遍历。原创 2024-02-22 16:51:59 · 380 阅读 · 0 评论 -
22-树-二叉树的后序遍历
这是树的第22篇算法,。给你一棵二叉树的根节点root,返回其节点值的。[3,2,1]原创 2024-02-23 11:20:29 · 370 阅读 · 0 评论 -
23-树-二叉搜索树迭代器
/ 返回 True。// 返回 True。// 返回 True。注意,指针初始化为一个不存在于 BST 中的数字,所以对。时,BST 的中序遍历中至少存在一个下一个数字。原创 2024-02-23 11:29:15 · 369 阅读 · 0 评论 -
24-树-完全二叉树的节点个数
的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。还有利用完美二叉树的做法,先判断是否是满节点,如果满的话直接计算,不满的话递归去做。,求出该树的节点个数。这是树的第24篇算法,原创 2024-02-26 10:15:06 · 382 阅读 · 0 评论 -
25-树-翻转二叉树
层级遍历肯定可以解决这个问题,在遍历到每一个节点的时候左右旋转。,翻转这棵二叉树,并返回其根节点。标准的递归也能解决这个问题。给你一棵二叉树的根节点。这是树的第25篇算法,原创 2024-02-26 10:29:37 · 308 阅读 · 0 评论 -
1-数组-有效的数独
这道题可以用哈希表记录。已知为9X9的表格,可以用[9]长度的数组记录行、列、格内的数据,冲突直接弹出。这是数组的第一题,从现在开始开启数组篇章。,验证已经填入的数字是否有效即可。原创 2024-01-16 10:19:41 · 381 阅读 · 0 评论 -
2-数组-旋转图像
旋转90度可以看出规律。这道题又额外要求原地旋转,因此以对角线为边界,调整左边的数字就好。旋转图像,这意味着你需要直接修改输入的二维矩阵。请你将图像顺时针旋转 90 度。使用另一个矩阵来旋转图像。当然,还可以模拟旋转逻辑。原创 2024-01-16 10:48:31 · 351 阅读 · 0 评论 -
3-数组-合并区间
区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].这道题的思路是先排序,然后找每一个区间的最左和最右边界。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,4] 和 [4,5] 可被视为重叠区间。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。这是数组的第3篇算法,原创 2024-01-17 10:14:24 · 334 阅读 · 0 评论