二叉树的右视图

17 Mar 2025 | 5 分钟阅读

树是一种常见的非线性数据结构。与数组、栈、队列和链表等线性数据结构不同,树展现出一种分层结构。树的排序信息无关紧要。树由两个指针和节点组成。这两个指针代表父节点的左孩子和右孩子。让我们彻底理解树中使用的术语。

  • 树中没有父节点的最高节点被视为树的根。每棵树都有一个根节点。
  • 父节点:一个节点的父节点是该节点在节点树中的前一个节点。
  • 子节点:一个节点的直接后继节点被称为该节点的子节点。
  • 兄弟节点:同一父节点的子节点互为兄弟节点。
  • 边:边作为父节点和子节点之间的连接节点。
  • 叶子:没有子节点的节点被称为叶子节点。它是树的最后一个节点。一棵树可以有多个叶子节点。
  • 一个节点的子树是把该特定节点视为根节点的树。
  • 深度:一个节点的深度是它与根节点之间的距离。
  • 高度:一个节点的高度是它与子树中最深节点之间的距离。
  • 任何节点的最大高度被称为树的高度。这与根节点的高度相同。
  • 层:在树中,层是与特定节点对应的父节点的数量。
  • 节点度:一个节点的度由它拥有的子节点数量决定。
  • 二叉树有 (N+1) 个 NULL 节点,其中 N 是树中节点的总数。
Right View of Binary Tree

为什么要使用基于树的数据结构?

  1. 您可能希望存储自然形成层次结构的信息,这是使用树的原因之一。例如,计算机的文件系统。
    Right View of Binary Tree
  2. 树提供了合理的访问/搜索速度(通过一些排序,如 BST)(比链表快,比数组慢)。
  3. 树提供了有限的插入和删除速度(比数组快,比无序链表慢)。
  4. 因为指针用于连接节点,所以树,像链表一样,没有最大节点数。

树数据结构的主要用途包括:

  • 分层数据操作。
  • 使信息可搜索(参见树遍历)。
  • 操作数据排序列表。
  • 用于创建视觉效果的数字图片。
  • 路由协议
  • 多阶段决策过程类型(参见商业象棋)。

什么是二叉树?

二叉树是一种由节点组成的数据结构——这些节点也称为左节点和右节点——每个节点最多有两个子节点。树从根节点开始。

二叉树表示

树中的每个节点都包含以下信息:

  • 指向左子节点的指针
  • 指向右子节点的指针

在 C 语言中,我们可以使用结构体来表示树节点。我们可以利用其他语言的面向对象特性中的类。下面是一个包含整数数据的树节点的示例。

当从右侧查看二叉树时可见的节点集合称为右视图。

示例

输出

Right view of the tree is 1 3 7 8

使用递归实现二叉树的右视图

其思路是利用递归,同时跟踪最高层级。此外,遍历树时应先访问右子树,再访问左子树。

上述策略的应用如下所示:

输出

1 3 7 8
?????..
Process executed in 1.11 seconds
Press any key to continue.

说明

要解决此问题,请遵循下面列出的说明

  • 应使用后序遍历首先检索最右侧的节点。
  • 维护一个名为 max_level 的变量,它将保存数据,直到打印出右视图为止。
  • 以后序方式遍历树时,如果当前层级高于 max_level,则打印当前节点并将 max_level 增加到当前层级。

使用层序遍历实现二叉树的右视图

输出

 1 3 7 8 
????
Process executed in 1.22 seconds
Press any key to continue

说明

思路是利用层序遍历,因为每个层级的最后一个节点构成了二叉树的右视图。

要解决此问题,请遵循下面列出的说明

  • 按层序遍历树。
  • 打印每个层级的最后一个节点。

下一主题严格二叉树