二叉树的类型

2024 年 8 月 28 日 | 阅读 6 分钟

计算机科学中的各种数据结构有助于以各种形式组织数据。树是流行的抽象数据结构,模拟层次树结构。树通常有一个根值和由父节点的子节点形成的子树。树是非线性数据结构。

通用树数据结构可以容纳的子节点数量没有限制。然而,二叉树的情况并非如此。本文将向您介绍一种特定的树数据结构——二叉树——以及不同类型的二叉树。

什么是二叉树数据结构?

在二叉树中,每个父节点最多可以有两个子节点,它是一种非线性树型数据结构。

二叉树中的每个节点除了数据元素外,还有左子节点和右子节点引用。位于树层次结构顶部的节点称为根节点。包含其他子节点的节点是父节点。

左子节点和右子节点是父节点的两个子节点。哈希、数据压缩、网络流量路由、构建二叉堆以及构建二叉搜索树都只是二叉树的用途中的一小部分。

与二叉树和二叉树类型相关的术语

  1. 叶子节点:它代表树中分支的末端。
  2. 根节点:根是树的最顶层节点。
  3. 父节点:树中除根节点以外的每个有至少一个子节点的节点都称为父节点。
  4. 子节点是从父节点直接移离根节点而来的节点。
  5. 这些是外部节点。它们是没有子节点的节点。
  6. 内部节点:顾名思义,这些是至少有一个子节点的节点。
  7. 树的深度:连接树节点到其根的边的数量。
  8. 树的高度定义为从节点到最深叶子节点的边数。树的高度也考虑根节点的高度。

二叉树的类型

  • 满二叉树。
  • 完全二叉树。
  • 完美二叉树。
  • 平衡二叉树。
  • 退化二叉树。

二叉树有多种类型,每种都有其独特的特性。下面详细描述了每种二叉树类型

1. 满二叉树

它是一种特殊的二叉树,只有零个或两个子节点。这意味着该二叉树中的每个节点都应有两个子节点,或者父节点应该是叶子节点或外部节点。

换句话说,满二叉树是一种特殊的二叉树,其中除外部节点外,每个节点都有两个子节点。如果二叉树只有一个子节点,则它不是满二叉树。在这种情况下,叶子节点的数量正好等于内部节点的数量加一。 L=I+1,其中 I 是节点总数,L 是叶子节点数。

2. 完全二叉树

一种称为完全二叉树的二叉树,除了最低层之外,所有树层都已完全填充了节点。此外,该二叉树的底部或最后一层的每个节点都应靠左。

3. 完美二叉树

当二叉树的所有内部节点都有两个子节点,并且所有叶子节点或外部节点都位于树的同一层或同一深度时,该二叉树就被称为“完美”二叉树。

高度为“h”的完美二叉树由两个节点组成。

4. 平衡二叉树

当二叉树的高度为 O(logN) 时,其中 N 是节点数,则认为该二叉树是“平衡”的。在平衡二叉树中,每个节点的左右子树的高度差应不超过一。可以生成平衡二叉搜索树的数据结构,如 AVL 树和红黑树。

5. 退化二叉树

当每个内部节点只有一个子节点时,二叉树被称为退化二叉树或病态二叉树。这些树在性能上类似于链表。

平衡二叉树与非平衡二叉树

二叉树遍历经常遇到指针为空且无用的情况。数组的访问操作比二叉搜索树 (BST) 快。树的高度决定了一个基本选择。

删除节点并不容易。

树的高度是一个基本选择。

BST 的时间复杂度

平均数最坏
Space (空格)O(n)O(n)
插入O(lg(n))O(n)
搜索O(lg(n))O(n)
删除O(lg(n))O(n)

二叉树遍历

线性数据结构,如链表、队列和栈,只有一种遍历方法。虽然有多种遍历树的方法,但以下是一些方法

  • 前序遍历
  • 中序遍历
  • 后序遍历

因此,我们将在本文中讨论上述的树遍历方法。现在我们来讨论树遍历的主题。

前序顺序

这种方法遵循“根-左-右”原则。它表示首先递归遍历左子树,然后访问根节点,最后访问右子树。前序遍历是指在遍历左子树和右子树之前(或之前)遍历根节点。

因此,在前序遍历中,每个节点都在其左右子节点之前被访问。

前序遍历有多种用途,包括

  1. 它用于复制树。
  2. 它还可以用于获取表达式树的前缀表达式。

后序导航

这种方法遵循“左-右-根”原则。它表示首先遍历根节点的左子树,然后递归遍历右子树,最后遍历根节点本身。由于根节点在遍历完左子树和右子树之后(或之后)才被遍历,因此称为后序遍历。

因此,在后序遍历中,每个节点在其左右子树之后被访问。

后序遍历的用途包括

  1. 它用于删除树。
  2. 它还可以用于获取表达式树的后缀表达式。

中序遍历

这种方法遵循“左-根-右”原则。它表示首先遍历根节点,然后遍历左子树,最后遍历右子树。由于根节点在左子树和右子树之间被遍历,因此称为中序遍历。

因此,在中序遍历中,每个节点在其左右子树之间被访问。

中序遍历的用途包括

  1. 它用于以升序获取 BST 节点。
  2. 它还可以用于获取表达式树的前缀表达式。

二叉树的应用

  • 二叉树以霍夫曼编码树的形式应用于数据压缩算法。
  • 表达式树是二叉树的一个应用,在编译器中使用。
  • 另一个二叉树应用是优先级队列,它以 O(log N) 的时间复杂度搜索最大值或最小值。
  • 显示分层数据。
  • 在电子表格和 Microsoft Excel 编辑应用程序中使用。
  • GCC 和 AOCL 等许多知名编译器使用语法树来执行算术运算。它们有助于数据库中的索引分段和系统中的缓存存储。
  • 用于实现优先级队列。
  • 用于通过更快地查找元素来为计算机提供快速内存分配(二叉搜索树)。
  • 编码和解码操作。

二叉树在现实中的应用

  • HTML 的 DOM。
  • 文件管理器。
  • 电子表格和 Microsoft Excel 使用基本数据结构。
  • 电子表格和 Microsoft Excel 是编辑器的工具。
  • 分析涉及路由算法的短语。

二叉树的优点包括

  • 二叉树的搜索过程非常快。
  • 二叉树可以以简单易懂的方式表示。
  • 从父节点到子节点以及反之亦然的操作可以有效地完成。
  • 易于理解和实现。
  • 金字塔式组织。
  • 数据集的结构链接应得到反映。
  • 与另一个数据存储相比,插入数据很简单。
  • 内存管理中的数据存储很简单。
  • 用户可以快速执行多个节点。
  • 可以存储任意数量的数据值。

二叉树的缺点

  • 二叉树遍历中的许多指针为空且无用。
  • 二叉搜索树 (BST) 的访问操作比数组访问操作花费的时间更长。
  • 根据树的高度,有一些基本选择。
  • 删除节点很困难。
  • 树的高度是一个基本选择。

下一主题B 树插入