查找二叉树中的重复子树

17 Mar 2025 | 5 分钟阅读

重复的树通常指大型数据结构子树中的相同子树。在二叉树中发现重复的子树在数据压缩、遗传学等多个领域中都是非常有价值的见解之一。在本文中,我们将深入探讨在二叉树中查找所有重复子树这一富有启发性的话题;我们将探索可以用来找到它们的各种方法、算法和技术。

它们乍一看可能显得多余,但它们可以提供多种优势,即:-

  1. 重复的子树可以最大限度地高效利用存储和内存介质,这在当今非常出色。
  2. 通过识别并利用重复的子树,可以改进树中的某些操作。
  3. 它们为数据压缩提供了绝佳的机会,因为在将树用作结构化数据的情况下,它们可以派上用场。
  4. 重复的子树可以快速帮助我们识别树上出现的任何常见模式,这对于优化非常有帮助。
  5. 如果我们需要对某个特定的子树进行更改或修改,我们可以修改或更新重复子树的一部分,即可完成。

实施

输出

Find Duplicate Subtrees in Binary Tree

代码的逐步实现

  1. 代码首先包含所有必要的头文件,以执行程序的各种输入和输出操作。
  2. 定义了一个“node”结构体,用于表示二叉树中的节点。它包含一个数据值以及指向左、右子节点的指针。
  3. 接下来,我们继续定义一个中序函数,负责二叉树的中序遍历。它通常接受两个参数,一个是无序映射(unordered map),另一个是当前正在访问的节点。
  4. 在中序函数内部,它首先检查一个基本条件,即验证当前节点是否为 NULL,如果是,则返回一个空字符串。否则,它会用“str”初始化一个字符串。
  5. 构建完子树字符串后,代码会检查当前字符串是否已作为键存在,如果存在,则意味着该子树之前已经出现过。
  6. 我们创建一个“printAllDups”函数,这是一个包装函数,它设置无序映射“m”并负责调用打印函数。
  7. 接下来,我们定义一个“newNode”函数,以帮助我们为新节点分配内存并在树中存储值。
  8. 在程序的主函数中,二叉树的根被设置为空值,并且节点被连接到二叉树结构中。

示例 2)

输出

Find Duplicate Subtrees in Binary Tree

代码的逐步实现

  1. 代码首先导入必要的 Java 包。
  2. 代码定义了一个名为“Binary Tree”的类,其中包含了程序的主要代码。
  3. 定义了一个“node”结构体,用于表示二叉树中的节点。它包含一个数据值以及指向左、右子节点的指针。
  4. 接下来,我们继续定义一个中序函数,负责二叉树的中序遍历。它通常接受两个参数,一个是无序映射(unordered map),另一个是当前正在访问的节点。
  5. 在中序函数内部,它首先检查一个基本条件,即验证当前节点是否为 NULL,如果是,则返回一个空字符串。否则,它会用“str”初始化一个字符串。
  6. 构建完子树字符串后,代码会检查当前字符串是否已作为键存在,如果存在,则意味着该子树之前已经出现过。
  7. 我们创建一个“printAllDups”函数,这是一个包装函数,它设置无序映射“m”并负责调用打印函数。
  8. 接下来,我们定义一个“newNode”函数,以帮助我们为新节点分配内存并在树中存储值。
  9. 在程序的主函数中,二叉树的根被设置为空值,并且节点被连接到二叉树结构中。