将二叉树展平成排序链表

2025年3月17日 | 阅读 7 分钟

扁平二叉树是普通二叉树的修改版本,因为所有存在的节点都被重新排列以创建线性结构。树中的所有节点都经过组织,使得从左到右遍历树时,我们观察到的项顺序与我们在正常中序遍历中观察到的顺序相同。

当执行某些任务(例如序列化或反序列化树,或者当我们需要对树执行线性遍历或任何其他算法)时,展平二叉树非常有用。

一些主要优点是:-

  1. 它们还有助于提高系统的内存存储和缓存局部性。
  2. 通过展平二叉树,我们可以轻松替换树中左指针和右指针的需求。
  3. 它还改善了树的内存局部性,例如链表中的节点将存储在附近的地址。
  4. 一些算法和操作在线性数据结构中实现起来比在二叉树上执行要容易得多。

实施

输出

Flatten Binary Tree to Sorted Linked List

代码的分步解释

  1. 代码将首先声明执行程序各种操作所需的头文件。
  2. 在代码的下一步,我们开始定义一个名为 'Node' 的结构,它代表二叉树中的一个节点,具有以下成员;数据以及指向左节点和右节点的指针。
  3. 接下来,我们在程序中声明打印函数,该函数将节点作为参数并打印展平的树。它使用右指针遍历树并打印每个节点上存在的所有值。
  4. 现在,我们必须声明中序函数,该函数将引用一系列向量和节点作为参数。此函数将进一步执行二叉树的中序遍历。
  5. 接下来,我们声明一个通常以“pos”和“node”作为引用的表单函数。这通常是一个辅助函数,用于构建扁平二叉树。
  6. 然后我们继续声明“展平”函数,此函数的主要作用是首先创建一个虚拟节点,然后对树进行中序遍历并存储节点的值。
  7. 在程序的主函数中,我们构造一个二叉树。
  8. 展平函数以树的根作为参数调用,结果传递给打印函数以显示结果。

示例 2)

输出

Flatten Binary Tree to Sorted Linked List

代码的分步解释

  1. 代码将首先从“java.util”导入主要类,包括“list”、“ArrayList”和“Node”。
  2. 在代码的下一步,我们开始定义一个名为 'Node' 的结构,它代表二叉树中的一个节点,具有以下成员;数据以及指向左节点和右节点的指针。
  3. 接下来,我们在程序中声明打印函数,该函数将节点作为参数并打印展平的树。它使用右指针遍历树并打印每个节点上存在的所有值。
  4. 现在,我们必须声明中序函数,该函数将引用一系列向量和节点作为参数。此函数将进一步执行二叉树的中序遍历。
  5. 接下来,我们声明一个通常以“pos”和“node”作为引用的表单函数。这通常是一个辅助函数,用于构建扁平二叉树。
  6. 然后我们继续声明“展平”函数,此函数的主要作用是首先创建一个虚拟节点,然后对树进行中序遍历并存储节点的值。
  7. 在程序的主函数中,我们构造一个二叉树。
  8. 展平函数以树的根作为参数调用,结果传递给打印函数以显示结果。

示例 3)

输出

Flatten Binary Tree to Sorted Linked List

代码的分步解释

  1. 代码将首先定义一个名为“Node”的二叉树结构。它具有以下三个成员:一个数据值和指向左子节点和右子节点的指针。
  2. 在代码的下一步,我们开始定义一个名为 'Node' 的结构,它代表二叉树中的一个节点,具有以下成员;数据以及指向左节点和右节点的指针。
  3. 现在,我们必须声明中序函数,该函数将引用一系列向量和节点作为参数。此函数将进一步执行二叉树的中序遍历。
  4. 接下来,我们声明一个通常以“pos”和“node”作为引用的表单函数。这通常是一个辅助函数,用于构建扁平二叉树。
  5. 然后我们继续声明“展平”函数,此函数的主要作用是首先创建一个虚拟节点,然后对树进行中序遍历并存储节点的值。
  6. 在程序的主函数中,我们构造一个二叉树。
  7. 展平函数以树的根作为参数调用,结果传递给打印函数以显示结果。