<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_74951730的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_74951730</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_74951730]]></copyright><item><title><![CDATA[每日算法题【二叉树】：层序遍历、用层序遍历判断二叉树是否为完全二叉树]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/151105694</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/151105694</guid><author>m0_74951730</author><pubDate>Tue, 02 Sep 2025 11:14:34 +0800</pubDate><description><![CDATA[设二叉树的根节点所在的层数为1，层序遍历就是从所在二叉树的根节点出发，首先访问第一层的树根节点，然后从左到右访问第二层上的节点，接着是第三层的节点，以此类推，自上而下，自左至右逐层访问树的节点的过程就是层序遍历。先用层序遍历将所有二叉树的所有连续节点遍历一遍，当在队列中找到空节点的时候，开始使用循环遍历队列，如果全为空就是完全二叉树，如果不全为空就不是完全二叉树。以根节点为第一层，先将根节点放入队列中，然后上一层节点弹出并打印，再将其下一层子节点放入队列中。]]></description><category></category></item><item><title><![CDATA[每日算法题【二叉树】：二叉树查找值为x的节点、给定字符串用前序遍历构建二叉树、二叉树的销毁]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/151083312</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/151083312</guid><author>m0_74951730</author><pubDate>Mon, 01 Sep 2025 21:14:48 +0800</pubDate><description><![CDATA[用前序遍历字符串，将经过的节点（字符）都申请到空间，然后将值放到二叉树中，并接着向下递，直到遇到空节点（字符#）结束递归。使用前序遍历整个二叉树，比较根节点是否为x，不为x就递下去判断左右子节点是否为x。]]></description><category></category></item><item><title><![CDATA[每日算法题【二叉树】：计算二叉树节点的个数、叶子结点的个数、第k层节点的个数]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/151083246</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/151083246</guid><author>m0_74951730</author><pubDate>Mon, 01 Sep 2025 21:11:32 +0800</pubDate><description><![CDATA[k为什么要传值而不是地址：因为如果传地址，则遍历左子节点和右子节点递到下一层时都会对同一个k-1。通过前序遍历二叉树，使用三目操作符进行判断，节点为空则返回0，节点不为空递到下一层进行判断并。如何返回k层的节点个数：当k=1时，return 1；并通过递归相加即可得到k层总个数。通过前序遍历二叉树，每递下去一层k-1，k=1时的节点总个数就是结果。​					而传值才能避免这个问题并保证两子树遍历的层数相同。代表这个不空的根节点。]]></description><category></category></item><item><title><![CDATA[每日算法题【栈和队列】：栈和队列的实现、有效的括号、设计循环队列]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/151044243</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/151044243</guid><author>m0_74951730</author><pubDate>Sun, 31 Aug 2025 12:19:04 +0800</pubDate><description><![CDATA[在循环队列中，我们使用取模运算（%）来实现队列指针的循环移动。具体来说，当队尾指针需要向后移动时，我们计算新的队尾位置为 (tail + 1) % capacity，其中 tail 是当前队尾指针的位置，capacity 是队列的容量。这样可以保证当队尾指针达到队列容量时，取模运算会使其重新回到队列的开头，实现了环形结构。在普通的线性队列中，队列指针（如队头指针和队尾指针）的范围是从 0 到队列容量减一。而在循环队列中，队尾指针在达到队列容量时不再继续增加，而是从队列的开头重新开始，形成了一个环形结构。]]></description><category></category></item><item><title><![CDATA[每日算法题【二叉树】：二叉树的最大深度、翻转二叉树、平衡二叉树]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/151022075</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/151022075</guid><author>m0_74951730</author><pubDate>Sat, 30 Aug 2025 16:45:37 +0800</pubDate><description><![CDATA[【代码】每日算法题【二叉树】：二叉树的最大深度、翻转二叉树、平衡二叉树。]]></description><category></category></item><item><title><![CDATA[每日算法题【二叉树】：堆的实现、堆排序的实现、文件中找TopK]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/151021974</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/151021974</guid><author>m0_74951730</author><pubDate>Sat, 30 Aug 2025 16:42:34 +0800</pubDate><description><![CDATA[将剩余N-K个元素依次与堆顶元素比较，如果比堆顶(k个中最小的元素)元素大则进行替换，替换完进行向下调整，堆中剩余的K个元素就是所求的前K个最小或者最大的元素。前k个最大的元素，则建小堆。前k个最小的元素，则建大堆。]]></description><category></category></item><item><title><![CDATA[每日算法题【二叉树】：另一棵树的子树、二叉树的构建及遍历]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150987608</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150987608</guid><author>m0_74951730</author><pubDate>Fri, 29 Aug 2025 15:33:04 +0800</pubDate><description><![CDATA[其核心就是给定字符串然后用前序遍历数组来构建二叉树。前序遍历每个节点进行(两颗子树是否相等)的比较。]]></description><category></category></item><item><title><![CDATA[每日算法题【二叉树】：对称二叉树、二叉树的前中后序遍历]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150987535</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150987535</guid><author>m0_74951730</author><pubDate>Fri, 29 Aug 2025 15:30:55 +0800</pubDate><description><![CDATA[递归思想：首先找到递归条件（根节点为空则直接返回），因为是前序所以先对根节点进行操作，然后通过再次调用函数递到下一层子树的根节点，等最后一层的子树的根节点也为空，再依次返回。第二步：通过前序遍历，将节点依次放入数组中，需注意索引要传地址，这样递归下去才会是同一个索引。利用递归的思想，前序遍历就是先遍历根节点，再遍历左子树，最后是右子树。第一步：计算二叉树的节点总数并申请对应的数组空间。]]></description><category></category></item><item><title><![CDATA[每日算法题【链表】：随机链表的复制、单链表的接口实现]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150927410</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150927410</guid><author>m0_74951730</author><pubDate>Wed, 27 Aug 2025 15:24:36 +0800</pubDate><description><![CDATA[【代码】每日算法题【链表】：随机链表的复制、单链表的接口实现。]]></description><category></category></item><item><title><![CDATA[每日算法题【链表】：链表分割、链表的回文结构]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150927325</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150927325</guid><author>m0_74951730</author><pubDate>Wed, 27 Aug 2025 15:22:09 +0800</pubDate><description><![CDATA[用指针遍历原链表，小于x的不做处理，大于等于x的尾插到原链表上，并删除之前的节点。O(n) - 遍历链表3次（找中点、反转、比较）O(1) - 只使用了固定数量的指针变量。]]></description><category></category></item><item><title><![CDATA[每日算法题【二叉树】：单值二叉树、相同的树]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150699851</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150699851</guid><author>m0_74951730</author><pubDate>Sun, 24 Aug 2025 13:05:18 +0800</pubDate><description><![CDATA[通过前序遍历，比较每个根节点与其左右子树的根节点是否相同；相同接着递归下去比较，如果都相同就会把所有的true返回；不相同就会停止递归，把false返回。使用前序遍历两棵二叉树，然后判断两棵二叉树节点的情况，一共分为两大类四种情况。]]></description><category></category></item><item><title><![CDATA[每日算法题【链表】：相交链表、环形链表、环形链表II]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150699797</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150699797</guid><author>m0_74951730</author><pubDate>Sun, 24 Aug 2025 13:00:45 +0800</pubDate><description><![CDATA[其次，我们让两个指针向前遍历，当两指针相遇时，在相遇点放置一个相遇指针meet，然后通过循环，meet指针在相遇点走，head指针在头节点走，两指针相遇时，此点即为入环的第一个结点。链表如果成环，快指针一次走两步，慢指针一次走一步。此时证明了链表成环。首先，我们申请两个指针，一个是快指针fast（一次走两步），一个是慢指针slow（一次走一步）。首先，我们申请两个指针，一个是快指针fast（一次走两步），一个是慢指针slow（一次走一步）。求交点：长的链表先走（长度差）步，再同时走，第一个相同的就是交点。]]></description><category></category></item><item><title><![CDATA[每日算法题【链表】：链表的中间节点、返回倒数第k个节点、合并两个有序链表]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150642778</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150642778</guid><author>m0_74951730</author><pubDate>Sat, 23 Aug 2025 16:16:53 +0800</pubDate><description><![CDATA[循环遍历比较两个链表，谁小谁就尾插到新链表当中，谁尾插谁加加，最后再判断一下有没有没比的，全放在新链表的最后。使用快慢指针，快指针走两步，慢指针走一步，快指针指向空，慢指针所指向的节点就是中间节点。定义两个前后指针，之间相差k步，当后指针指为空的时候，前指针所指向的节点就是目标节点。]]></description><category></category></item><item><title><![CDATA[每日算法题【链表】：移除链表元素、反转链表]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150608598</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150608598</guid><author>m0_74951730</author><pubDate>Fri, 22 Aug 2025 13:28:13 +0800</pubDate><description><![CDATA[创建一个新链表，将不等于这个值的节点都尾插到新链表当中，最后返回新链表。取原链表中的节点，然后头插到newhead新链表中。]]></description><category></category></item><item><title><![CDATA[每日算法题【顺序表】：删除有序数组中的重复项、合并两个有序数组]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150584276</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150584276</guid><author>m0_74951730</author><pubDate>Thu, 21 Aug 2025 15:29:19 +0800</pubDate><description><![CDATA[定义三个下标指针，ptr1指向数组1的最后一个元素位置，ptr2指向数组2的最后一个元素的位置，ptr指向数组1的最后一个下标位置（因为我们要让ptr1和ptr2从后向前遍历元素进行比较，将大的放在最后一个下标位置ptr）]]></description><category></category></item><item><title><![CDATA[每日算法题【顺序表】：轮转数组、移除元素]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150553657</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150553657</guid><author>m0_74951730</author><pubDate>Wed, 20 Aug 2025 14:32:11 +0800</pubDate><description><![CDATA[通过创建一个新数组，对原数组的数据进行重新排序。]]></description><category></category></item><item><title><![CDATA[每日算法题【顺序表】：消失的数字]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150532162</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150532162</guid><author>m0_74951730</author><pubDate>Tue, 19 Aug 2025 18:35:50 +0800</pubDate><description><![CDATA[所以：1.遍历正常数组（外层循环）拿一个数出来，进行内层循环（遍历的原数组）的比较。3.如果原数组有和这个数字相等的，则将标记置为0并break。4.如果遍历完整个原数组都无与之相等的数字，则当退出循环时，标记不会被置为0。法一：先排序，再依次查找，如果下一个值不等于前一个+1，则下一个值就是消失的数字。的所有数字总和是唯一的，缺少一个数字会导致实际和比理论和小 恰好那个数字的值。的理论总和，然后减去数组中所有数字的实际总和，差值就是消失的数字。重点：当正常数组中的数，原数组没有，则查找到消失的数字。]]></description><category></category></item><item><title><![CDATA[C++ 仿RabbitMQ实现消息队列项目]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/150402613</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/150402613</guid><author>m0_74951730</author><pubDate>Thu, 14 Aug 2025 23:53:00 +0800</pubDate><description><![CDATA[在后端开发中，尤其是分布式系统里，跨主机之间使用生产者消费者模型，是非常普遍的需求。因此，我们通常会把阻塞队列封装成一个独立的服务器程序，并且赋予其丰富的功能。这样的服务程序我们就称为消息队列（Message Queue，MQ）。其中RabbitMQ是一个非常知名的、功能强大且广泛使用的消息队列。本项目就仿照RabbitMQ模拟实现一个简单的消息队列。开发环境：Linux（Ubuntu-22.04）、VSCode/Vim、g++/gdb、Makefile开发主语言：C++Protobuf。]]></description><category></category></item><item><title><![CDATA[在线五子棋对战项目]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/149032810</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/149032810</guid><author>m0_74951730</author><pubDate>Mon, 30 Jun 2025 22:47:03 +0800</pubDate><description><![CDATA[本篇博客只为记录实现五子棋项目的知识记录和代码的实现，不具备教学意义。本项目主要实现一个网页版的五子棋对战游戏，其主要支持以下核心功能：开发环境：核心技术：


2.1.2 启动服务



2.1.3 获取临时密码


2.1.4 设置数据库密码



2.1.5 登录查看字符集是否正常



2.2 
2.2.1 介绍
WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的消息推送机制。WebSocket 协议本质上是⼀个基于 TCP 的协议。为了建⽴⼀个 WebSocket 连接]]></description><category></category></item><item><title><![CDATA[计算机网络 ： NAT、代理服务、内网穿透]]></title><link>https://blog.youkuaiyun.com/m0_74951730/article/details/148579562</link><guid>https://blog.youkuaiyun.com/m0_74951730/article/details/148579562</guid><author>m0_74951730</author><pubDate>Wed, 11 Jun 2025 09:39:25 +0800</pubDate><description><![CDATA[本文将深入解析以下核心内容：

NAT技术：揭秘私有IP与公网IP的转换机制，以及NAPT如何通过“IP+端口”映射解决多设备共享出口问题。
代理服务：对比正向代理（隐藏客户端）与反向代理（保护服务器）的工作原理，探讨其在负载均衡、科学上网等场景的应用。
内网穿透：从FRP工具的实现到P2P打洞技术，剖析如何绕过NAT限制直接访问内网设备。]]></description><category></category></item></channel></rss>