- 博客(7)
- 收藏
- 关注
原创 二叉树遍历与操作全解析
本文介绍了二叉树的几种遍历方式及其实现代码,包括前序、中序、后序和层序遍历。重点讲解了二叉树的基本操作算法:1.计算节点总数(左子树+右子树+1);2.求叶子节点个数(左右子树都为空);3.计算二叉树高度(取左右子树最大高度+1);4.查找第k层节点数(递归k-1层);5.查找特定节点(递归搜索左右子树)。最后给出了通过字符串创建二叉树的方法,其中用'#'表示空节点。这些算法都采用递归实现,体现了二叉树问题的递归特性。
2025-10-13 22:59:39
883
原创 二叉树堆操作全解析
本文介绍了二叉堆的实现与应用,主要包含小堆的构建及操作。通过数组结构实现堆存储,详细讲解了初始化、销毁、插入、删除堆顶元素等基础操作。重点分析了向上调整(Insert O(logn))和向下调整(Delete O(logn))两种核心算法,并比较了两种建堆方式的时间复杂度(向上调整O(nlogn) vs 向下调整O(n))。最后说明了堆排序的实现原理,指出降序排序适合用小堆完成。代码实现包含Swap交换函数、AdjustUp/AdjustDown调整算法及堆操作接口,为堆数据结构提供了完整实现方案。
2025-09-17 23:45:35
170
原创 队列操作全解析:从初始化到销毁
队头删除考虑的比较多,不能传递空指针且队头不能是空指针,如果队列长度为1即phead->next=NULL,则可以直接free掉,同时将phead和ptail置为NULL;队列长度大于一的话,则可以定义一个next用来记录phead->next,free掉phead后,next成为新的头,phead=next;首先,因为队列的特殊性,需要知道链表的头尾节点,要想改变链表的数据,则需要传递二级指针,为了简化函数的参数,定义一个新结构体,其包含着链表的头和尾以及size(视为链表长度)
2025-09-07 23:15:51
139
原创 栈操作全解析:从初始化到销毁
本文介绍了栈的基本操作实现,重点分析了栈初始化时top值的不同含义及其影响。当top=0时指向栈顶元素的下一个位置,而top=-1时直接指向栈顶元素。文章详细说明了栈的初始化、销毁、入栈、出栈等核心操作的实现逻辑,包括动态扩容机制(初始4个元素空间,满时双倍扩容)和边界条件处理。同时解释了获取栈顶元素、判空和获取元素个数等辅助功能的实现方法。这些操作都基于顺序表结构,并通过top指针来维护栈的状态,体现了栈"后进先出"的特性。
2025-09-02 22:53:50
251
原创 带环链表中找到入环的第一个节点
摘要:环形链表II问题需找到入环节点。方法1利用快慢指针相遇时推导的关键等式S=(x-1)*C+C-N,让两指针分别从头节点和相遇点出发,相遇点即为入环节点。方法2通过断开环将问题转化为相交链表问题,需计算长度差再同步移动。两种方法各有利弊,方法1思路巧妙但代码简单,方法2思路直接但实现较复杂。若难以理解方法1,方法2可作为替代方案。(150字)
2025-08-27 23:23:18
264
原创 判断链表中是否带环
首先我们让slow和fast位于链表头部,slow每次遍历一个,fast每次遍历两个,当slow进入循环点时,fast已经在循环里面。真正的总结:根据上次总结得知S为奇数,L-1为奇数时永远不可能追上,但是S和L-1不可能同时为奇数,因此一定能追上。此时就是典型的追击问题,fast与slow之间的速度差为1,当fast=slow时,链表带环;当slow进环之后,假设slow与fast之间 距离为S,slow与fast之间的速度差为2;带入等式右边,L为偶数(x+1)*L为偶数,S为奇数,偶数-奇数=奇数,
2025-08-26 22:57:43
360
原创 相交链表问题的算法
因此headA可以遍历totallen次,使两链表的总长度一致,再同时遍历链表,当headA等于headB时是交点。我们注意到两个链表虽然头不相同,但是共同一个尾,因此我们分别遍历两个链表,如果尾部相同则说明两个链表有交点,不相同则没有交点。当totallen<0时,则相反,只需要将totallen取相反数,headA修改为headB就行(此时headB为长链表)同时我们开辟两个变量len1和len2分别计算headA和headB的长度,用totallen来存储两链表的长度差。
2025-08-25 21:02:42
293
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅