二叉树是一种数据结构,用于以允许有效检索和操作的方式组织数据。它是一种数据结构,它使用两个节点(称为叶子和节点)来表示数据。叶子表示数据,节点表示叶子之间的关系。每个节点有两个子节点,称为同级,每个子节点都有一个父节点。父节点是最接近树根的节点。从树中删除节点时,该节点会同时从其子节点和父节点中删除。
以下是二叉树数据结构的一些应用:
二叉搜索树是一种按排序顺序存储项目的数据结构。在二叉搜索树中,每个节点存储一个键和一个值。键用于访问项,值用于确定项是否存在。键可以是任何类型的值,例如整数、浮点数、字符串,甚至是这些类型的组合。该值可以是任何类型的项,例如整数、浮点数、字符串,甚至是这些类型的组合。将节点添加到树中时,其键用于访问存储在该节点上的项。从树中删除节点时,其键用于访问存储在该节点上的项。
二叉搜索树是一种特殊类型的二叉树,其中包含特定的元素顺序。它具有三个基本品质:
树遍历是访问树的所有节点的过程。由于根(头)是第一个节点,并且所有节点都通过边缘(或链接)连接,因此我们始终从该节点开始。我们用三种方式遍历一棵树。然后,请考虑以下树作为示例:
// Print inorder traversal of given tree.
void printInorderTraversal(Node root)
{
if (root == null)
return;
//first traverse to the left subtree
printInorderTraversal(root.left);
//then print the data of node
System.out.print(root.data + " ");
//then traverse to the right subtree
printInorderTraversal(root.right);
}
// Print preorder traversal of given tree.
void printPreorderTraversal(Node root)
{
if (root == null)
return;
//first print the data of node
System.out.print(root.data + " ");
//then traverse to the left subtree
printPreorderTraversal(root.left);
//then traverse to the right subtree
printPreorderTraversal(root.right);
}
// Print postorder traversal of given tree.
void printPostorderTraversal(Node root)
{
if (root == null)
return;
//first traverse to the left subtree
printPostorderTraversal(root.left);
//then traverse to the right subtree
printPostorderTraversal(root.right);
//then print the data of node
System.out.print(root.data + " ");
}
deque可以被认为是一个项目数组,但有一个重要的区别:deques不是将项目从末端推开以腾出空间,而是设计为允许在任一端插入项目。此属性使 deques 非常适合执行任务,例如跟踪库存、计划任务或处理大量数据。
deque可以被认为是一个类似数组结构,但有一个重要的区别:deque的设计允许在两端插入项,而不是将项推到末尾或弹出以腾出空间。这个属性使得deques非常适合执行诸如跟踪库存、调度任务或处理大量数据等任务。
以下是一些用于deque数据结构的实时应用程序:
以下是可用的关键操作:
优先级队列是一种抽象数据类型,类似于队列,因为每个元素都被分配了一个优先级值。优先级队列中元素的供应顺序由它们的优先级(即删除它们的顺序)决定。如果元素具有相同的优先级,则按它们在队列中出现的顺序提供它们。
以下是一些用于优先级队列的实时应用程序:
下表包含对优先级队列的不同实现的渐近分析:
操作 | 查找 | 插入 | 删除 |
---|---|---|---|
链表 | O(1) | O(n) | O(1) |
二进制堆 | O(1) | O(log n) | O(log n) |
二叉搜索树 | O(1) | O(log n) | O(log n) |
图是一种由节点和边组成的非线性数据结构。节点也称为顶点,边是连接图形中任意两个节点的直线或弧。
以下是两种最常见的图形表示形式:
这种表示的缺点之一是,即使图形是稀疏的(边缘较少),它也占用相同的空间量。添加顶点需要 O(V^2)。计算顶点的所有邻居也需要 O(V) 时间,效率不高。
2.邻接列表:在此方法中,每个节点都包含直接连接到该顶点的节点列表。列表末尾的每个节点都使用 null 值连接,以指示它是列表中的最后一个节点。这样可以节省空间 O(|V|+|E|)。在最坏的情况下,图形可以有 C(V, 2) 边,占用 O(V^2) 空间。添加顶点更简单。计算顶点的所有相邻点所需的时间最少。
这种表示的缺点之一是,诸如“从顶点你到顶点v有边吗?”这样的查询效率低下,在最坏的情况下取O(V)。
广度优先搜索 (BFS) | 深度优先搜索 (DFS) |
---|---|
它代表“广度优先搜索” | 它代表“深度优先搜索” |
BFS(广度优先搜索)使用队列数据结构查找最短路径。 | DFS(深度优先搜索)使用堆栈数据结构查找最短路径。 |
在进入 BFS 中的下一个级别之前,我们将遍历同一级别上的所有节点。 | DFS 从根节点开始,并尽可能通过节点进行,直到我们到达没有未访问的附近节点的节点。 |
与DFS相比,BFS更慢。 | 与BFS相比,DFS更快。 |
当目标靠近源时,BFS 的性能更好。 | 当目标远离源时,DFS 的性能更好。 |
BFS 需要更多的内存。 | DFS 需要较少的内存。 |
已遍历多次的节点将从队列中删除。 | 当没有更多要访问的节点时,访问的节点将添加到堆栈中,然后删除。 |
回溯不是BFS中的选项。 | DFS 算法是一种采用回溯概念的递归算法。 |
它基于先进先出原则(先进先出)。 | 它基于后进先出原则(后进先出)。 |
AVL树是高度平衡二叉搜索树,以其发明者Adelson,Velski和Landis命名。AVL 树比较左右子树的高度,并确保差异小于 1。这种区别称为平衡因子。
平衡因子 = 高度(左子树) − 高度(右子树)
我们可以在 AVL 树上执行以下两个操作:
AVL 树可以通过执行下面列出的四个旋转来平衡自身:
以下是AVL树数据结构的一些实时应用程序:
B 树是一种通常用于光盘访问的 m 路树。阶数为 m 的 B 树只能有 m-1 键和 m 个子项。使用 B 树的主要原因之一是它能够在单个节点中存储大量键以及较大的键值,同时保持树的高度相对较小。
下图显示了 4 阶的 B 树:
以下是 B 树数据结构的关键属性:
以下是B树数据结构的实时应用:
Segment树是用于存储间隔或段的二叉树。Segment树由表示间隔的节点组成。当对数组有多个范围查询并对数组元素进行更改时,将使用Segment树。
数组 A7 的Segment树将如下所示:
以下是对Segment树数据结构执行的关键操作:
以下是Segment树的实时应用程序:
“Trie”一词是“检索”的缩写。Trie 是一种数据结构,它将一组字符串存储为排序树。每个节点的指针数与字母字符数相同。它可以使用其前缀在字典中查找单词。假设所有字符串都是由英文字母中的字母“a”到“z”组成的,则每个trie节点最多可以有26个点。
Trie 也称为数字树或前缀树。节点连接到的密钥由其在 Trie 中的位置决定。Trie 允许我们在 O(L) 时间内插入和查找字符串,其中 L 是单个单词的长度。这显然比BST更快。由于它的实现方式,这也比哈希更快。无需计算哈希函数。无需处理冲突(就像我们在开放寻址和单独链接中所做的那样)
Trie 的另一个好处是我们可以轻松地按字母顺序打印所有单词,这在散列中并不容易。Trie 还可以有效地执行前缀搜索(或自动完成)。
tries的主要缺点是它们需要大量的内存来存储字符串。每个节点的节点指针数量过多
以下是Trie数据结构的一些实时应用程序:
红黑树是一种自平衡二叉搜索树。鲁道夫·拜耳(Rudolf Bayer)于1972年发明了它,并将其称为“对称二元B树”。
红黑树是二叉树,其中每个节点都有一个颜色属性,红色或黑色。通过比较从根到叶的任何简单路径上的节点颜色,红黑树确保没有路径的长度是任何其他路径的两倍以上,从而确保树总体上是平衡的。
红黑树与二叉树相似,因为它们都以二进制互补的二进制格式存储数据。然而,与二叉树相比,红黑树有一个重要的优势:它们的访问速度更快。由于红黑树的访问速度非常快,因此它们通常用于存储大量数据。
红黑树可用于存储可表示为一组值的任何类型的数据
以下是红黑树数据结构的一些实时应用程序:
LRU 缓存或最近最少使用的缓存允许通过按使用顺序组织项目来快速识别长时间未使用的元素。为了实现这一点,使用了两种数据结构:
堆是一种特殊的基于树的非线性数据结构,其中树是一个完整的二叉树。如果除最后一关之外的所有关卡都被完全填满,并且最后一关尽可能保留所有元素,则称二叉树是完整的。堆有两种类型:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有