Java 二叉树2025年5月13日 | 阅读 33 分钟 二叉树 是一种树状非线性数据结构,主要用于排序和搜索,因为它以分层形式存储数据。在本节中,我们将学习 Java 中二叉树数据结构的实现。还将提供二叉树数据结构的简要说明。 二叉树每个节点(父节点)最多有两个子节点(左节点和右节点)的树称为二叉树。最顶端的节点称为根节点。在二叉树中,一个节点包含数据以及指向左子节点和右子节点的指针(地址)。 二叉树的高度是树的根与其最远(最深)叶节点之间边的数量。如果树为空,则高度为0。节点的高度表示为h。 ![]() 上述二叉树的高度为 2。 我们可以使用以下公式计算叶节点和节点的数量。
其中,h 是二叉树的高度。 二叉树示例![]() 二叉树的类型数据结构中有以下类型的二叉树
Java 中的二叉树实现有许多方法可以实现二叉树。在本节中,我们将使用 LinkedList 数据结构来实现二叉树。此外,我们还将实现遍历顺序、搜索节点和在二叉树中插入节点。 使用 LinkedList 实现二叉树算法定义 Node 类,该类包含三个属性:data、left 和 right。这里,left 表示节点的左子节点,right 表示节点的右子节点。
BinarySearchTree.java 输出 Binary tree after insertion 1 Binary tree after insertion 2 1 3 Binary tree after insertion 4 2 5 1 3 Binary tree after insertion 4 2 5 1 6 3 7 二叉树操作可以在二叉树上执行以下操作
Java 程序在二叉树中插入节点BinaryTreeInsert.java 输出 Building tree with root value 25 ================================= Inserted 11 to left of Node 25 Inserted 15 to right of Node 11 Inserted 16 to right of Node 15 Inserted 23 to right of Node 16 Inserted 79 to right of Node 25 Java 程序在 Java 中删除节点算法
考虑下图。 ![]() DeleteNode.java 输出 Inorder traversal before deletion: 7 11 12 10 15 9 8 Inorder traversal after deletion: 8 11 12 10 15 9 Java 程序在二叉树中搜索节点算法
SearchBinaryTree.java 输出 Element is present in the binary tree. 二叉树遍历
注意:除了上述三种遍历方式,还有一种遍历方式称为边界遍历。Java 程序遍历中序、前序和后序遍历BinaryTree.java 输出 Inorder traversal of binary tree 12 34 56 67 89 90 Preorder traversal of binary tree 34 12 56 89 67 90 Postorder traversal of binary tree 12 67 90 89 56 34 除了上述操作,我们还可以执行查找最大节点、最小节点和所有节点之和等操作。 Java 程序查找二叉树中的最大节点LargestNode.java 输出 Largest element in the binary tree: 99 Java 程序查找二叉树中的最小节点算法
SmallestNode.java 输出 Smallest element in the binary tree: 1 Java 程序查找二叉树的最大宽度算法
BinaryTree.java 输出 Maximum width of the binary tree: 4 查找二叉树的最大元素查找二叉树的最大元素涉及递归地比较树节点中的值以确定最高值。它对于各种算法至关重要,有助于高效的搜索操作和理解树的结构。 BinaryTreeMaxElement.java 输出 Maximum element in the binary tree is: 5 时间复杂度:O(n) 空间复杂度:O(n) 查找二叉树的高度树的高度是一个基本指标,用于衡量从根到任何叶节点的*最长路径*的长度。它量化了树结构的深度,反映了其整体大小和复杂性。 BinaryTreeHeight.java 输出 Height of the binary tree is: 3 时间复杂度:O(n),其中 n 是树中的节点数。 辅助空间复杂度:O(h),其中 h 是树的高度。 查找二叉树的*最深*节点查找树的最深节点涉及识别离根节点最远的节点。该节点位于树的最大深度处,并且没有子节点。 DeepestNodeInBinaryTree.java 输出 Deepest node in the binary tree is: 5 时间复杂度:O(n) 辅助空间复杂度:O(w) 树的*左视图*二叉树的左视图是指从左侧看树时可见的节点。它包括从根到最左叶节点的*每一层的第一个节点*。 LeftViewOfBinaryTree.java 输出 Left view of the binary tree is: [1, 3, 4] 时间复杂度:O(n)(线性,其中 n 是二叉树中的节点数) 辅助空间复杂度:O(m),其中 m 是二叉树中任何层的*最大节点数*。 二叉树的*右视图*二叉树的右视图是指从右侧看树时*可见的节点集合*。它包括*每一层的最顶端节点*,使我们能够看到*每一层*的*最右侧节点*。 RightViewOfBinaryTree.java 输出 Right view of the binary tree is: [1, 2, 5] 时间复杂度:O(n),其中 n 是二叉树中的节点数。 辅助空间复杂度:O(m),其中 m 是二叉树中*任何层*的*最大节点数*。 二叉树的*顶视图*二叉树的顶视图是指从*上方*看树时*可见的节点*。它包括在*每个垂直层*上*最先遇到*的节点,从根开始。 TopViewOfBinaryTree.java 输出 Top view of the binary tree is: [4, 3, 1, 2] 时间复杂度:O(N) 辅助空间复杂度:O(N) 树的*底视图*二叉树的底视图是指从*底部*向上看树时*可见的节点*。它显示*树的最低层节点*,同时考虑它们与根的*水平距离*。 BottomViewOfBinaryTree.java 输出 Bottom view of the binary tree is: [4, 3, 5, 2] 时间复杂度:O(N) 辅助空间复杂度:O(N) 树的*镜像*树的镜像,也称为镜像树或反转树,是通过*交换原始树中每个节点的左右子节点*而形成的二叉树。这种变换会产生一个*结构沿垂直轴反转*的树,其中*每个节点的子节点都被镜像*。 MirrorImageOfBinaryTree.java 输出 Original tree: 4 3 5 1 2 Mirror image of the tree: 2 1 5 3 4 时间复杂度:O(n) 辅助空间复杂度:O(h) 序列化二叉树树的序列化涉及将二叉树*转换为可以存储或传输并稍后重建的格式*,同时*保留其结构*。此过程通常使用*遍历方法*(例如前序遍历),并*包含 null 节点的标记*。下面是一个实现此方法的 Java 程序。 SerializeDeserializeBinaryTree.java 输出 Serialized tree: 1 3 4 null null 5 null null 2 null null Inorder traversal of deserialized tree: 4 3 5 1 2 时间复杂度:O(n),其中 n 是二叉树中的节点数。 辅助空间:O(n),其中 n 是二叉树中的节点数。 二叉树的应用
二叉树的优点
二叉树的缺点
|
给定一个无向加权连通图。正整数 n 表示图中共有 n 个节点,编号从 1 到 n。我们还提供了一个边数组,其中 edges[i] = [ui, vi, weighti] 表示存在一个……
7 分钟阅读
鉴于 Java 的基础自主性,串行接口是困难的。串行通信需要标准化的编程接口和明确的阶段执行,这对于 Java 来说是困难的。悲剧的是,Sun 对 Java 中的串行通信并未给予太多关注。Sun 已经定义了一个串行通信编程接口...
阅读9分钟
在 Java 8 Streams 中,flatMap() 方法将操作作为映射器函数应用,并提供元素值的流。这意味着在每个元素的每次迭代中,map() 方法都会创建一个单独的新流。通过使用*展平机制*,它会合并...
阅读 13 分钟
Spring 和 Struts 都是用于开发 Web 应用程序的流行 Java 框架。Spring 是一个轻量级且灵活的框架,它为构建企业级应用程序提供了一个全面的解决方案。它提供*依赖注入*、*面向切面编程*以及与 Hibernate 和 JPA 的集成。Spring 提倡一种*模块化*和...
阅读 2 分钟
Java 中保存双精度数据的缓冲区称为 DoubleBuffer。它属于 Java.nio 包,是 Buffer 类的子类。通过使用 flip() 方法,可以将缓冲区准备好在写入数据后读取数据,反之亦然。首先...
阅读 3 分钟
在 Java 项目中,每个可执行 jar 文件都包含一个 main 方法。通常,它放置在应用程序的起点。要通过自执行 jar 文件执行 main 方法,我们必须拥有正确的 manifest 文件,并在项目完成时将其打包...
阅读 3 分钟
Java vs Kotlin Java 和 Kotlin 都是面向对象编程语言。但两者用于不同目的。Kotlin 用于开发 Android 应用程序,而 Java 主要用于开发企业应用程序。在本节中,我们讨论了 Java 和 Kotlin 之间的区别。Java Java 是...
5 分钟阅读
列表是编程中一种数据结构类型,它表示元素的*有序集合*。它允许按顺序存储和访问元素,并支持添加、删除和检索元素。列表通常用于在各种编程语言中组织和操作数据。流是...
阅读 2 分钟
面向对象编程中的一个关键思想是多态性,它允许将各种类型的对象视为单个超类或接口的实例。Java 提供了两种实现多态的方法:静态多态(有时称为编译时多态)和动态多态(通常称为运行时多态)。...
阅读 4 分钟
模型-视图-控制器(MVC)是 Web 开发领域中一个*著名的设计模式*。它是一种*组织代码的方式*。它规定程序或应用程序应由*数据模型*、*表示信息*和*控制信息*组成。MVC 模式需要所有这些组件...
阅读 8 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India