373 次浏览
在本节中,我们将学习二叉搜索树的层序遍历技术。假设我们有一棵这样的树:遍历序列将是这样的:10, 5, 16, 8, 15, 20, 23算法levelOrderTraverse(root):开始 定义队列que来存储节点 将根节点插入队列。 当队列不为空时,执行 项目:=队列前端的项目 打印项目的value 如果项目的左子节点不为空,则 将项目的左子节点插入队列 结束 ... 阅读更多
1K+ 次浏览
回溯是一种增量式解决问题的算法技术。它使用递归方法来解决问题。可以说,回溯用于查找解决优化问题的所有可能组合。在本节中,我们将介绍哈密顿环、M着色问题、N皇后问题、迷宫老鼠问题、算术谜题、子集和问题、数独求解算法、骑士巡游问题、拔河问题、单词拆分算法、通过交换数字获得最大数问题。
473 次浏览
在这个问题中,给定一个正整数字符串,我们必须找到通过交换数字k次到不同位置而得到最大值的排列。我们将通过选择一个数字并一次将其与后面的数字交换来找到最大数,重复此过程k次。回溯策略在这里有效,因为当我们找到一个不大于前一个值的数时,我们会回溯到旧值并再次检查。输入和输出输入:一个多位数。输入是:129814999 输出:最大值 ... 阅读更多
518 次浏览
在这个问题的输入中,给定一个没有空格的句子,还提供了一个包含一些有效英文单词的字典。我们必须找到将句子分解成单个字典单词的可能方法。我们将尝试从字符串的左边开始搜索以找到一个有效的单词,当找到一个有效的单词时,我们将搜索该字符串下一部分中的单词。输入和输出输入:作为字典的一组有效单词,以及一个不同单词无空格排列的字符串。字典:{mobile, sam, sung, man, mango, icecream, and, go, i, love, ... 阅读更多
720 次浏览
在这个问题中,给定一组整数,我们必须将其分成两部分,使得两个子集的和的差尽可能小。因此,我们的目标是将两组实力大致相等的分组划分,以便参加拔河比赛。如果子集n的大小是偶数,则必须将其分成n/2,但对于n的奇数值,则一个子集的大小必须为(n-1)/2,另一个子集的大小必须为(n+1)/2。输入和输出输入:一组不同的权重。{23, 45, -34, 12, 0, ... 阅读更多
4K+ 次浏览
在国际象棋中,我们知道骑士可以以特殊的方式跳跃。它可以在每个方向上水平移动两个方格和垂直移动一个方格,或者垂直移动两个方格和水平移动一个方格,因此完整的移动看起来像英文字母“L”。在这个问题中,有一个空的棋盘,以及从棋盘上任何位置出发的骑士,我们的任务是检查骑士是否可以访问棋盘上的所有方格。当它可以访问所有方格时,则放置到达该位置所需的跳跃次数 ... 阅读更多
3K+ 次浏览
在本节中,我们将尝试解决著名的数字迷宫问题数独。数独是一个 9 x 9 的数字网格,整个网格也分成 3 x 3 的盒子。有一些规则可以解决数独。我们必须使用数字 1 到 9 来解决这个问题。在一个行、一列或一个 3 x 3 的盒子中不能重复一个数字。使用回溯算法,我们将尝试解决数独问题。当某个单元格填充了一个数字时,它会检查它是否有效。当它 ... 阅读更多
15K+ 次浏览
在这个问题中,给定一个包含一些整数元素的集合。还提供另一个值,我们必须找到给定集合的一个子集,其和与给定的和值相同。这里使用回溯方法来尝试选择一个有效的子集,当一个项目无效时,我们将回溯以获得前一个子集并添加另一个元素以获得解决方案。输入和输出输入:此算法采用一组数字和一个和值。集合:{10, 7, 5, 18, 12, 20, 15} 和值:35 输出:所有 ... 阅读更多
14K+ 次浏览
在算术谜题中,一些字母用于为其分配数字。例如,十个不同的字母持有从 0 到 9 的数字值,以正确执行算术运算。给出两个单词,以及另一个单词作为这两个单词加法的答案。例如,我们可以说两个单词“BASE”和“BALL”,结果是“GAMES”。现在,如果我们尝试通过它们的符号数字添加 BASE 和 BALL,我们将得到答案 GAMES。注意:最多必须有十个字母,否则无法求解。输入和输出输入:此算法将 ... 阅读更多
5K+ 次浏览
在这个问题中,给定一个大小为 N x N 的迷宫。源位置和目标位置分别是左上角单元格和右下角单元格。一些单元格是有效的移动单元格,而一些单元格是被阻止的。如果一只老鼠从起始顶点移动到目标顶点,我们必须找到是否有任何方法可以完成路径,如果可能,则为老鼠标记正确的路径。迷宫使用二元矩阵给出,其中标记为 1 表示有效的路径,否则对于阻塞单元格则为 0。注意:老鼠可以 ... 阅读更多