原地将排序的双向链表转换为平衡二叉搜索树2024年8月28日 | 阅读 4 分钟 在本教程中,我们将学习如何就地将已排序的双向链表 (DLL) 转换为平衡二叉搜索树 (BST)。 方法一(简单)以下是一个简单的算法,我们首先找到链表的中间节点,并将其作为要构建的树的根。 1) 将链表的中间节点作为根。 2) 对左右两半部分递归执行相同操作。
时间复杂度为 O(nLogn),其中 n 表示链表中的节点数。 方法二(巧妙)方法一从根到叶构建树。我们在此方法中从叶到根构建。其概念是按照它们在双向链表中出现的精确顺序将节点添加到 BST 中,以确保树确实可以在 O(n) 时间内构建。我们首先计算给定链表中的节点数。假设计数为 n。计数节点后,我们取左侧 n/2 个节点并递归构建左子树。构建完左子树后,我们将中间节点分配给根并连接左子树到根。最后,我们递归构建右子树并将其连接到根。 在构建 BST 的同时,我们不断将链表头指针移到下一个,以便在每次递归调用中获得正确的指针。 方法二的执行如下所示。下面展示了生成平衡 BST 的主要代码。 C 语言程序 C++ 程序 输出 Given Linked List 8 9 10 11 12 13 14 PreOrder Traversal of constructed BST 11 9 8 10 13 12 14 时间复杂度将是 O(n)。 下一个主题合并两个平衡二叉搜索树 |
C库函数strcspn()用于确定两个字符串中第一个字符之前字符的长度。语法:strcspn(const char *str1, const char *str2)此函数中使用的参数:str1:必须搜索的字符串,或目标字符串。str2:来自参数字符串的字符...
阅读 3 分钟
在计算机编程中,数组是一种基本的数据结构类型,可以让我们有效地存储和管理数据。它们是在内存中紧密相邻存储的相关数据元素的集合。C编程语言支持一维(1D)和...
阅读 4 分钟
4.在此程序中,我们需要打印数组中存在的重复元素。这可以通过两个循环完成。第一个循环将选择一个元素,第二个循环将通过将选定的元素与其他元素进行比较来迭代数组...
阅读 2 分钟
在 C 语言中,我们有 `union` 和 `struct` 数据类型,可以在其中声明用户定义的数据类型。`struct` 的大小取决于数据成员。但有时,我们不需要如此庞大的数据类型,因为它会占用内存,而它...
阅读 3 分钟
连续文件分配是一种由操作系统用于在硬盘上存储和检索文件的技术。这种方法将每个文件存储在磁盘上的一个连续块中。它表明整个文件保存在一个位置……
阅读 6 分钟
在本文中,您将学习如何用 C 语言创建一个计算电费的程序。代码 #include <stdio.h> #define UNIT_RATE 7.5 // 每消耗单位的费率 #define TAX_RATE 0.1 // 税率 //计算账单金额的函数 float calculateBill(int units) { float billAmount, taxAmount; ...
阅读 3 分钟
?在本教程中,我们将探讨为什么优先队列不能像普通队列那样“回绕”。优先队列 优先队列是一种队列,其中每个元素都被赋予一个优先级值。所有元素都按照优先级顺序给出。这表明……
阅读 3 分钟
引言:类型转换运算符是一元运算符,它要求将一种数据类型转换为另一种数据类型。C++支持四种类型转换:静态转换、动态转换、const转换、reinterpret转换。在本文中,我们将深入讨论static_cast。静态转换:可以使用的最简单的转换是...
阅读 3 分钟
打瞌睡的理发师悖论最早由 Dijkstra 在 1965 年提出。这个问题基于一个虚构的场景,即理发店里只有一位理发师。理发店的等候区和工作区分开。顾客可以在等候区...
阅读 3 分钟
模式匹配在计算机科学和许多其他领域得到了广泛应用。模式匹配算法用于在较大的文本或数据集内搜索模式。模式匹配最流行的算法之一是 Boyer-Moore 算法,该算法最早发布于...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India