Java.数据结构
文章平均质量分 93
数据结构与算法是Java高效编程的基石
User_芊芊君子
越努力,越幸运
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【从堆到优先级队列】:手把手搞懂堆的原理、应用与排序
摘要 本文详细讲解了优先级队列(PriorityQueue)的核心原理与实现。优先级队列基于堆结构,分为小根堆和大根堆。文章首先介绍了堆的定义与特性,包括堆的排序规则、元素限制和扩容机制。随后重点讲解了堆的创建、插入和删除操作,通过代码示例演示了向下调整(siftDown)和向上调整(siftUp)的实现逻辑。最后简要提及了Java中PriorityQueue的接口特性,如元素比较要求、非线程安全等。全文结合图示和代码,帮助读者深入理解堆和优先级队列的应用场景与实现细节。原创 2025-12-24 07:30:00 · 1516 阅读 · 74 评论 -
【LeetCode经典题解】:二叉树转字符串递归解法的核心逻辑与代码解剖
本文解析了将二叉树转换为特定字符串格式的递归解法。通过前序遍历递归处理节点,重点处理两种边界情况:当左子树为空但右子树非空时保留空括号"()",右子树为空时省略括号。代码分析展示了如何利用StringBuilder拼接字符串,并通过递归方法tree2strChild实现核心逻辑。该解法体现了递归遍历的简洁性和对边界条件的精准把控,为解决类似树形结构转换问题提供了清晰的思路模板。掌握这种前序递归+条件判断的模式,能够高效处理二叉树的结构化输出需求。原创 2025-12-18 07:30:00 · 1352 阅读 · 48 评论 -
【LeetCode经典题解】:从前序和中序遍历构建二叉树详解
本文介绍了通过前序遍历和中序遍历序列构建二叉树的递归分治算法。前序遍历确定根节点,中序遍历划分左右子树,通过递归处理子树区间完成构建。代码使用全局索引跟踪根节点位置,并详细解析了递归终止条件、左右子树边界划分等关键步骤。该算法体现了二叉树遍历特性的巧妙应用,也可扩展至后序+中序构建等问题,是理解树形结构递归思想的经典案例。原创 2025-12-15 07:30:00 · 1353 阅读 · 76 评论 -
【LeetCode经典题解】搞定二叉树最近公共祖先:递归法+栈存路径法,附代码实现
摘要: 本文详解二叉树最近公共祖先(LCA)问题的两种解法: 递归法:通过后序遍历自底向上回溯,若当前节点是p/q或左右子树分别包含p/q,则返回该节点作为LCA。时间复杂度O(n),空间复杂度O(h)。 栈存路径法:分别存储根到p/q的路径,对齐栈长度后比较首个公共节点。时间复杂度O(n),空间复杂度O(n)。两种方法均附完整代码,递归法简洁高效,路径法直观易理解,适用于不同解题场景。原创 2025-11-21 09:02:27 · 905 阅读 · 79 评论 -
【LeetCode经典题解】二叉树层序遍历:从思路拆解到代码实现,手把手教你搞定!
摘要: 本文详解二叉树层序遍历的实现方法,核心思路为“队列+分层循环”结构。算法遵循“从上到下、从左到右”原则,通过二维列表存储结果,队列控制访问顺序。实现步骤包括:初始化结果容器、空树处理、队列辅助遍历,以及嵌套循环分层处理节点(外层控制层级,内层通过size固定当前层节点数防止混层)。代码展示中特别标注关键注释,最终返回按层组织的节点值二维列表。该实现不仅满足基础层序需求,更为广度优先算法拓展提供清晰框架,是二叉树遍历的典型实践案例。原创 2025-11-19 09:35:03 · 993 阅读 · 56 评论 -
【LeetCode经典题解】平衡二叉树高效判断:从O(n²)到O(n)优化
本文探讨了判断平衡二叉树的两种方法。第一种方法采用"自顶向下"递归,通过计算子树高度并递归验证平衡性,时间复杂度为O(n²),存在重复计算。第二种"自底向上"递归方法在后序遍历中同步计算高度和判断平衡,利用提前终止递归优化效率,时间复杂度降至O(n)。文章通过代码对比展示了两种实现方式,并强调算法优化中执行逻辑调整和中间结果复用的重要性。平衡二叉树的判断既考察了对数据结构本质的理解,也体现了算法效率提升的关键思路。原创 2025-11-17 12:41:58 · 1563 阅读 · 85 评论 -
【LeetCode经典题解】递归破解对称二叉树之谜
本文讲解了如何判断二叉树是否对称。通过递归思想,将问题分解为比较左右子树的镜像关系:若左子树左节点等于右子树右节点,且左子树右节点等于右子树左节点,则对称。文章详细分析了递归边界条件,并提供了Java代码实现。该方法以简洁的递归逻辑完美解决了二叉树对称性判断问题,体现了分而治之的算法思想。原创 2025-11-12 07:30:00 · 1418 阅读 · 65 评论 -
【Java】从树形结构到二叉树:一篇搞懂数据结构里的“家族树”
本文介绍了树形结构的基本概念和二叉树的特性与应用。主要内容包括:1)树形结构的定义、表示方法和术语;2)二叉树的两种类型(满二叉树和完全二叉树);3)二叉树的五大性质;4)二叉树的两种存储方式;5)二叉树的基本操作实现,包括手动创建二叉树、三种遍历方式(前序、中序、后序)以及计算节点个数、叶子节点数量等方法。通过递归定义和具体代码示例,帮助读者理解这种重要的非线性数据结构。原创 2025-11-10 12:40:40 · 2210 阅读 · 85 评论 -
【LeetCode 经典题解】:队列与栈的双向模拟——从原理到代码详解
本文通过LeetCode经典题目解析了如何用队列实现栈和用栈实现队列的数据结构转换。队列实现栈部分采用两个队列,通过元素转移的方式模拟栈的后进先出特性;栈实现队列部分则利用两个栈,通过元素倒置实现队列的先进先出特性。两种方法都详细讲解了push、pop、top/peek等核心操作的具体实现步骤,并提供了完整的Java代码示例。文章以图文结合的方式生动展示了数据结构间的特性转换原理,帮助读者深入理解栈和队列的本质区别与相互转换技巧。原创 2025-11-05 07:30:00 · 1360 阅读 · 98 评论 -
【Java数据结构入门必看】:栈的方法使用、模拟实现与队列全家桶(循环队列+双端队列)
本文深入探讨了栈和队列这两种基础数据结构。栈遵循"后进先出"原则,通过数组或链表实现,重点讲解了压栈、出栈操作及链表实现方式。队列采用"先进先出"机制,介绍Queue接口的使用方法,分析循环队列和双端队列的实现原理。文章从概念定义、核心操作到底层实现,全面解析了这两种数据结构的特性与应用场景,帮助读者掌握其实现原理和使用方法。原创 2025-11-03 07:30:00 · 1177 阅读 · 87 评论 -
从0到1手撕双向链表,再到LinkedList源码拆解,这篇数据结构干货让你直接逆袭成大佬
摘要 本文深入探讨了Java中双向链表的实现与应用。首先分析了单向链表的局限性,指出双向链表通过增加前驱指针解决了遍历方向单一、删除操作低效等问题。接着详细模拟实现了双向链表的节点类、头插法、尾插法、指定位置插入等核心操作,并配图说明指针变化过程。针对删除操作,特别处理了头节点、尾节点等边界情况。最后对比了LinkedList与ArrayList的特性差异,为实际开发中的数据结构选型提供了参考依据。通过源码解析和示例代码,帮助开发者深入理解双向链表的工作原理和应用场景。原创 2025-10-29 07:00:00 · 17388 阅读 · 65 评论 -
图解Java链表反转:迭代法详解
摘要: 本文详细解析了力扣206题“反转链表”的迭代解法。通过图解展示了链表反转前后的结构变化,重点分析了多节点情况下的反转逻辑:记录当前节点(cur)和下一节点(curN),通过头插法逐步反转,直到cur为空。代码实现简洁清晰,适合算法新手理解链表反转的核心思路。文末总结了迭代法的关键要领,帮助读者掌握这一高频考点。 (字数:149)原创 2025-10-24 08:30:00 · 1233 阅读 · 83 评论 -
【Java链表】从概念结构到单向链表创建,增删查改全流程实战
本文主要介绍了链表的基本概念、结构分类以及单向链表的实现方法。链表是一种非连续存储结构,适合频繁插入和删除操作。文中重点讲解了单向不带头非循环链表的创建、打印、查找、头插和尾插等核心操作,并配以示意图帮助理解。通过代码示例展示了如何实现链表的基本功能,包括节点定义、链表遍历、长度计算、元素查找以及头插尾插等操作。文章为学习数据结构中的链表提供了实用指导,适合Java初学者理解链表的基本原理和实现方式。原创 2025-10-20 09:43:40 · 1405 阅读 · 75 评论 -
【Java ArrayList】从入门到精通:从概念,使用到扩容机制,一篇带你掌握Java动态数组核心
本文深入剖析Java中的ArrayList数据结构,包括其底层动态数组实现、核心操作方法及特性。ArrayList作为Java集合框架中最常用的动态数组,支持随机访问、序列化和克隆操作,提供三种构造方式(无参构造、指定初始容量、基于其他集合构建)。文章详细介绍了ArrayList的常用方法如增删改查、截取子列表等,并通过源码分析与示例代码展示其实现原理。特别强调ArrayList非线程安全特性,并指出其自动扩容机制与性能特点,为开发者提供ArrayList的最佳实践参考。原创 2025-10-15 09:46:10 · 2466 阅读 · 85 评论 -
【LeetCode必刷好题】:Java顺序表实现杨辉三角
本文详细解析了杨辉三角的实现方法,通过二维列表动态生成每一行数字。核心思路是利用上一行相邻数字之和计算当前行元素,首尾固定为1。代码示例展示了如何用Java实现该算法,通过外层循环控制行数、内层循环处理列元素。文章强调杨辉三角不仅是数学经典案例,更是理解二维数据结构和动态编程的绝佳素材,帮助读者掌握其生成原理和优化方向。原创 2025-10-13 09:09:48 · 1950 阅读 · 77 评论 -
【Java ArrayList】底层方法的自我实现
本文介绍了Java中ArrayList类的自定义实现。通过定义MyArrayList类,模拟了动态数组的核心功能,包括添加元素(尾部/指定位置)、查找元素、获取/设置元素值、删除元素等操作。重点讲解了扩容机制(grow()方法)和边界检查逻辑,使用usedSize记录有效数据量,并通过数组拷贝实现动态扩容。文章还展示了如何自定义异常类处理非法操作,为理解Java集合框架的底层实现提供了实践参考。原创 2025-10-01 11:01:58 · 2040 阅读 · 94 评论 -
别再让类型限制你的代码!【Java包装类+泛型】,让数据结构开发一步到位
本文介绍了Java中的包装类和泛型两大核心特性。包装类为基本数据类型提供对象封装,实现基本类型与对象的转换;泛型通过类型参数化提高代码复用性和安全性。重点讲解了装箱/拆箱机制、泛型语法、类型擦除原理、泛型上界限定以及泛型方法的定义与使用。两者结合能构建灵活安全的数据结构,是Java实现高效编程的重要技术组合。(150字)原创 2025-09-24 12:31:27 · 1447 阅读 · 77 评论 -
【Java.数据结构】初识集合框架
本文介绍了Java中的数据结构和算法基础。数据结构是组织和存储数据的方式,Java集合框架封装了常用数据结构,包括线性结构(如List、Queue)和非线性结构(如Set、Map)。算法是解决特定问题的有限步骤,其效率通过时间复杂度和空间复杂度衡量。重点讲解了时间复杂度的概念及大O表示法,通过多个示例(如冒泡排序、二分查找、递归等)分析了不同算法的时间复杂度。文章为Java数据结构与算法学习提供了基础认知框架。原创 2025-09-22 16:42:38 · 2167 阅读 · 77 评论
分享