Mirror of n-ary Tree in Java2025年5月9日 | 阅读 6 分钟 N 叉树的镜像是一种转换,其中每个节点的左右子树都被交换。这个概念类似于二叉树的镜像,但在这里,每个节点可以有多个子节点。要获得 N 叉树的镜像,我们需要递归地反转树中每个节点的子节点顺序。 ![]() 问题陈述给定两个 N 叉树,我们需要检查它们是否互为镜像。如果它们是镜像,则打印是,否则打印否。 我们还给定e,表示两棵树的边数。两个数组A[]和B[]。每个数组都有 2*e 个空格分隔的值 u, v,表示两棵树中从 u 到 v 的一条边。 过程包括:
这种变换对于各种树操作都很有用,包括某些搜索算法、模式匹配和可视化。镜像树保留了结构,但子节点顺序相反。 在继续本节之前,我们将首先找到如何找到 N 叉树的镜像树。 查找镜像树在这种方法中,我们基本上通过后序遍历的方式反转 N 叉树。该算法类似于如何为二叉树创建镜像树。 在上面的函数convertToMirror(TreeNode root) 中,我们首先将所有以子节点为根的子树转换为它们的镜像(通过递归调用),然后反转子节点本身。 算法步骤 1:通过创建节点并连接父子关系来构建 N 叉树。 步骤 2:递归遍历树以处理每个节点及其子树。 步骤 3:反转每个节点的子节点以创建镜像。 步骤 4:执行层序遍历以逐层打印树。 步骤 5:打印镜像前后的树结构。 输出 Original tree traversal: Level-0: 1 Level-1: 2 3 4 Level-2: 5 6 7 8 9 Mirror tree traversal: Level-0: 1 Level-1: 4 3 2 Level-2: 9 8 7 6 5 时间复杂度:O(N),其中 N 是节点数。 辅助空间复杂度:O(1),由于递归和用于层序遍历的队列。 检查两个 N 叉树是否为镜像有两种方法可以解决此问题。 使用哈希这种方法的基本思想是使用堆栈的无序映射来查看给定的 N 叉树是否互为镜像。 假设第一个 N 叉树是 t1,第二个 N 叉树是 t2。对于 t1 中的所有节点,将其相邻节点推入堆栈。现在,对于 t2 中的每个节点,如果其连接的节点与堆栈的顶部匹配,则从堆栈中弹出这些元素。 如果不匹配,如果堆栈的顶部与节点不匹配,则两棵树永远不会形成镜像。 然后对每个对应的节点重复此操作。
例如 现在让我们考虑第二棵树中的一个节点,例如 X。 对于节点 X,在映射中查看使用了哪个堆栈。 a = 第二棵树中节点 X 的堆栈顶部; b = 第二棵树中 X 的连接节点。 if (a!= b) return false; 从堆栈中弹出节点 X。 让我们在 Java 程序中实现上述方法。 输出 The trees are mirror: true 解释 节点类:定义一个类来表示 N 叉树中的节点,每个节点存储数据和子节点列表。
本质上,该代码通过比较两个 N 叉树在对应位置的结构和值来验证它们是否互为镜像。 |
Java 是开发人员编写代码的首选。它是一种非常流行且成功的编程语言,用于构建应用程序。Java 开发人员的数量日益增加。它主要用于开发 Web 和移动应用程序。要成为...
5 分钟阅读
Java 中的 Optional 类是一个显式的容器对象,它包含一个可能存在也可能不存在的非 null 值。它最初在 Java 8 中使用,用于提供一种更强大、更具成本效益且更安全的方式来处理可能...
阅读 4 分钟
JAMES GOSLING:Java 之父 "一个伟大的头脑从不局限于世界上现有的技术,他带着卓越的想法和愿景前进,以改进现有技术,并用他杰出的作品服务世界"。是的,我谈论的是...
阅读 3 分钟
该类型是一种基本数据类型。它是一种单精度32位IEEE 754浮点数。它用于声明变量和方法。它表示小数。要点:float的范围是从1.40129846432481707e-45到3.40282346638528860e+38(正或负)。它的默认值是...
阅读 2 分钟
文本处理中的一个典型问题是字数统计。Java 多线程可以通过将任务分解成更小的部分并同时处理它们来极大地加快处理速度。在本节中,我们将讨论使用 Java 多线程进行字数统计的不同方法。使用……
阅读 8 分钟
在数组中计算每个查询的最大 XOR 值的问题是一个非常有趣的话题,它涉及到位操作技术和 Trie(前缀树)数据结构。我们得到一个名为 nums 的非负整数数组……
阅读 10 分钟
在本节中,我们将学习如何在不使用算术运算符(*)的情况下在 Java 中将两个数字相乘。两个数字的乘积可以通过重复加法方法找到。这意味着将乘数加到自身上,直到乘数次。该方法...
阅读 3 分钟
在 Java 中代表 Plain Old Java Object。它是一个普通对象,不受任何特殊限制的约束。该文件不需要任何特殊的类路径。它提高了 Java 程序的可读性和可重用性。现在已被广泛接受……
阅读 6 分钟
在本节中,我们将讨论什么是“有害数”,并创建 Java 程序来检查给定的数字是否是“有害数”。“有害数”程序经常在 Java 编码面试和学术中出现。“有害数” 如果一个数字中 1 的总数……
阅读 4 分钟
Lambda 表达式在 Java 8 中引入,是编写简洁、函数式代码的强大工具。Lambda 表达式是一个匿名函数,可用于实现函数式接口定义的方法。函数式接口是只定义了一个...的接口。
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India