
算法系列
文章平均质量分 96
算法与数据结构学习总结
DTcode7
专注于《前端开发》、《微信小程序》领域 ,同时WEB开发、小程序开发、AIGC、IT信息化等领域摸爬滚打多年,深谙网页js,上班摸鱼、自动化打工等领域。略懂的前端开发、数据库、油猴脚本、Vue等框架,具备一定实操经验。让学习成为一种习惯,与君共享,携手共进!
我没有把枪口对向妇孺,而是选择对向自己。紧紧握住的是人性中的野蛮,涌溅出的是精神之海的浊秽。风雨大作之后呆滞的眼神是我最后倔强。让我们把握住贤者时间疯狂学习,努力提升自己!
展开
-
算法 二叉树 前序
二叉树的前序遍历是一种常见的遍历方式,它按照“根节点 -> 左子树 -> 右子树”的顺序访问节点。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。本文将深入探讨二叉树前序遍历的基本概念、常见问题及其解决方案,并提供多种实现方法及其代码示例,旨在帮助读者深入理解二叉树前序遍历的本质和应用技巧。这种方法的时间复杂度为 O(n),空间复杂度为 O(h),其中 n 是节点数,h 是树的高度。这种方法的时间复杂度为 O(n),空间复杂度为 O(h)。原创 2024-10-26 09:49:05 · 719 阅读 · 0 评论 -
算法 动态规划
希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。斐波那契数列是一个经典的动态规划问题,定义为 F(n) = F(n-1) + F(n-2),其中 F(0) = 0,F(1) = 1。通过上述方法和技巧的学习与实践,可以有效地提升处理动态规划问题的能力。带备忘录的递归法通过保存已计算的结果来避免重复计算,时间复杂度为 O(n),空间复杂度为 O(n)。0/1背包问题是指在给定容量的背包中选择物品,每种物品只能选择一次,使得背包中物品的总价值最大。原创 2024-10-26 07:07:51 · 1112 阅读 · 0 评论 -
算法 链表总结
基本概念与作用链表的基本操作操作一:创建链表示例一操作二:遍历链表示例二操作三:插入节点示例三操作四:删除节点示例四操作五:反转链表示例五不同角度的功能使用思路思路一:处理多链表示例六思路二:处理循环链表示例七实际工作中的应用技巧在算法和数据结构领域,链表是一种非常基础且重要的数据结构。链表由一系列节点组成,每个节点包含数据部分和指向下一个节点的引用。链表的特点在于其动态性,可以在运行时轻松地插入和删除节点,而不需要像数组那样预先分配固定大小的内存。原创 2024-10-26 04:43:54 · 650 阅读 · 0 评论 -
算法 CodeTop
本文将深入探讨 CodeTop 中的一些经典问题,并提供多种实现方法及其应用场景,旨在帮助读者深入理解算法的本质。这种方法的时间复杂度为 O(n),空间复杂度为 O(1)。这种方法的时间复杂度为 O(n),空间复杂度为 O(n)。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。暴力法是最直观的方法,通过遍历数组,将不重复的元素复制到一个新的数组中。这种方法的时间复杂度为 O(n),空间复杂度为 O(n)。,为我们广大开发同胞谋福祉,原创 2024-10-26 01:56:06 · 1101 阅读 · 0 评论 -
算法 删除有序数组中的重复项
其中一个经典的问题是“删除有序数组中的重复项”,即给定一个有序数组,删除重复的元素,使得每个元素只出现一次,并返回新的数组长度。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。暴力法是最直观的方法,通过遍历数组,将不重复的元素复制到一个新的数组中。本文将深入探讨如何高效地删除有序数组中的重复项,并提供多种实现方法及其应用场景,旨在帮助读者深入理解数组操作的本质。这种方法的时间复杂度为 O(n),空间复杂度为 O(n)(由于递归调用栈)。原创 2024-10-25 23:53:10 · 996 阅读 · 0 评论 -
算法 二分查找 搜索插入位置
在算法和数据结构领域,二分查找是一种高效的搜索算法,常用于在有序数组中查找特定元素的位置。其中一个经典的问题是“搜索插入位置”,即给定一个有序数组和一个目标值,找到目标值应该插入的位置,使得数组仍然保持有序。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。这种方法的时间复杂度为 O(log n),空间复杂度为 O(log n)(由于递归调用栈)。暴力法是最直观的方法,通过遍历数组,找到第一个大于或等于目标值的位置。函数来找到目标值的插入位置。原创 2024-10-25 21:36:02 · 857 阅读 · 0 评论 -
算法 数组 合并两个有序数组
其中一个经典的问题是“合并两个有序数组”,即给定两个已排序的数组,将它们合并成一个新的有序数组。暴力法是最直观的方法,通过将两个数组合并成一个新数组,然后对新数组进行排序。这种方法的时间复杂度为 O((m+n) log (m+n)),空间复杂度为 O(m+n),其中 m 和 n 分别是两个数组的长度。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。这种方法的时间复杂度为 O(m+n),空间复杂度为 O(m+n)(由于递归调用栈)。原创 2024-10-25 19:17:49 · 1163 阅读 · 0 评论 -
算法 数组 杨辉三角
这种方法的时间复杂度为 O(n^2),空间复杂度为 O(n^2)。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。这种方法的时间复杂度为 O(n^2),空间复杂度为 O(n)。暴力法是最直观的方法,通过双重循环遍历数组,生成每一行的数字。这种方法的时间复杂度为 O(n^2),空间复杂度为 O(n^2)。这种方法的时间复杂度为 O(n^2),空间复杂度为 O(n^2)。在某些情况下,我们只需要生成杨辉三角的对称部分,即每一行的前半部分。原创 2024-10-25 17:04:55 · 1005 阅读 · 0 评论 -
算法 数组 只出现一次的数字
其中一个经典的问题是“只出现一次的数字”,即给定一个数组,其中除了一个数字之外,其他数字都出现了两次,找出那个只出现一次的数字。遍历数组时,所有成对出现的数字会被抵消掉,最终结果就是只出现一次的数字。排序法通过先对数组进行排序,然后遍历排序后的数组,检查相邻的元素是否相等,找出只出现一次的元素。哈希表法通过使用哈希表(字典)来记录每个元素的出现次数,遍历数组时更新哈希表,最后找出只出现一次的元素。暴力法是最直观的方法,通过双重循环遍历数组,统计每个元素的出现次数,找出只出现一次的元素。学习路线(点击解锁)原创 2024-10-25 14:08:25 · 990 阅读 · 0 评论 -
算法 数组 多数元素
由于多数元素的出现次数超过 ⌊n/2⌋,所以排序后的中间位置一定是多数元素。这种方法的时间复杂度为 O(n log n),空间复杂度为 O(1) 或 O(n)(取决于排序算法)。其中一个经典的问题是“多数元素”,即给定一个大小为 n 的数组,找出其中出现次数超过 ⌊n/2⌋ 的元素。哈希表法通过使用哈希表(字典)来记录每个元素的出现次数,遍历数组时更新哈希表,最后找出出现次数超过 ⌊n/2⌋ 的元素。暴力法是最直观的方法,通过双重循环遍历数组,统计每个元素的出现次数,找出出现次数超过 ⌊n/2⌋ 的元素。原创 2024-10-25 11:05:14 · 649 阅读 · 0 评论 -
算法 数组 存在重复元素
这种方法的时间复杂度为 O(n),空间复杂度为 O(1)(取决于元素值的范围)。其中一个常见的问题是“存在重复元素”,即给定一个数组,判断是否存在重复的元素。排序法通过先对数组进行排序,然后遍历排序后的数组,检查相邻的元素是否相等。这种方法的时间复杂度为 O(n log n),空间复杂度为 O(1) 或 O(n)(取决于排序算法)。这种方法的时间复杂度为 O(n),空间复杂度为 O(n)。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。原创 2024-10-25 08:07:24 · 741 阅读 · 0 评论 -
算法 数组 提莫攻击
给定提莫攻击的时间点和每次攻击的持续时间,计算提莫对敌人的中毒总时间。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。暴力法是最直观的方法,通过遍历每次攻击的时间点和持续时间,计算总的中毒时间。我们可以将每次攻击的时间段视为一个区间,然后合并这些区间,计算合并后区间的总长度。在某些情况下,提莫的攻击时间可能不是均匀分布的,而是不规则的。一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身农奴把歌唱,,为我们广大开发同胞谋福祉,原创 2024-10-25 04:58:02 · 650 阅读 · 0 评论 -
算法 数组 下一个更大元素
其中一个经典的问题是“下一个更大元素”,即给定一个数组,对于每个元素,找到在其右侧的第一个比它大的元素。如果不存在这样的元素,则输出 -1。遍历数组时,如果当前元素大于栈顶元素,则栈顶元素的下一个更大元素就是当前元素。暴力法是最直观的方法,通过双重循环遍历数组,对于每个元素,查找其右侧的第一个比它大的元素。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。在某些情况下,数组中的每个元素可能带有权重,我们需要找到下一个更大元素的同时考虑权重。原创 2024-10-25 01:42:09 · 929 阅读 · 0 评论 -
算法 链表 两数相加
两数相加”问题在实际应用中有广泛的意义,例如在大数运算、金融计算等领域中,传统的整数运算可能会受到数据类型的限制,而链表则可以灵活地处理任意长度的数字。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。在某些情况下,我们需要处理非常大的数,传统的整数运算可能会受到数据类型的限制。递归法利用了递归的思想,每次处理两个链表的当前节点,并将结果连接到递归调用的结果链表中。为了处理这种情况,可以在较短的链表后面补零,使其长度与较长的链表相同。原创 2024-10-24 22:59:34 · 859 阅读 · 0 评论 -
算法 链表 两数相加
其中一个经典的问题是“两数相加”,即给定两个非空链表,表示两个非负整数,它们的数字以逆序方式存储,每个节点包含一个数字。“两数相加”问题在实际应用中有广泛的意义,例如在大数运算、金融计算等领域中,传统的整数运算可能会受到数据类型的限制,而链表则可以灵活地处理任意长度的数字。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。递归法利用了递归的思想,每次处理两个链表的当前节点,并将结果连接到递归调用的结果链表中。在实际应用中,两个链表的长度可能不同。原创 2024-10-24 20:27:31 · 968 阅读 · 0 评论 -
算法 链表 反转链表
链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的链接。反转链表是链表操作中的一个经典问题,不仅在面试中经常被问到,而且在实际项目中也有广泛的应用。这个问题可以通过先找到第 m 个节点,然后反转从第 m 到第 n 的节点,最后再将反转后的部分重新连接到原链表中来解决。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。递归法利用了递归的思想,每次将当前节点的后续部分反转,然后将当前节点连接到反转后的链表末尾。原创 2024-10-24 17:36:54 · 722 阅读 · 0 评论 -
算法 链表 合并两个有序链表
迭代法是最直观的方法,通过比较两个链表的当前节点值,较小的节点被添加到结果链表中,然后移动相应链表的指针。合并两个有序链表意味着将两个已排序的链表合并成一个新的有序链表,新链表中的元素也应保持原有的排序关系。一个有效的方法是使用优先队列(最小堆),每次取出最小的节点加入结果链表,然后将该节点的下一个节点重新加入队列。递归法利用了递归的思想,每次选择两个链表中较小的节点作为新链表的一部分,并将该节点的下一个指针指向其余部分的合并结果。通过上述方法和技巧的学习与实践,可以有效地提升处理链表相关问题的能力。原创 2024-10-24 15:18:16 · 2082 阅读 · 0 评论 -
算法 链表 相交链表
这种方法更加巧妙,两个指针分别从两个链表头部开始遍历,当一个指针到达链表末尾时,跳转到另一个链表的头部继续遍历。最终,两个指针会在相交节点相遇,或者同时到达两个链表的末尾。这是最直接的方法,通过遍历第一个链表并将所有节点存储在一个哈希表中,然后遍历第二个链表,检查是否有节点已经存在于哈希表中。相交链表问题的应用场景很多,比如在文件系统中追踪文件的历史版本,或者在网络路由中寻找最短路径等。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。原创 2024-10-24 12:52:11 · 939 阅读 · 0 评论 -
算法 数组 模拟行走机器人
总之,模拟行走机器人是解决路径规划和移动控制问题的一种有效方法,掌握模拟行走机器人的基本原理和高级技巧对于算法开发人员来说非常重要。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。在设计高性能系统时,模拟行走机器人不仅可以用于解决路径规划问题,还可以结合其他算法(如A*搜索、遗传算法等)一起使用,以构建更加灵活和高效的解决方案。通过设置不同的指令序列,可以创建复杂的移动模式,增强游戏的趣味性和挑战性。在复杂的应用中,可能需要多个机器人协同工作。原创 2024-10-23 08:28:13 · 1008 阅读 · 0 评论 -
算法 算法思想 二分查找
类似地,我们也可以找到最后一个等于目标值的元素。left = mid + 1 # 继续在右半部分查找else:# 测试用例target = 2if index!原创 2024-10-23 05:58:11 · 832 阅读 · 0 评论 -
算法 贪心算法 柠檬水找零
总之,贪心算法是解决优化问题的一种有效方法,掌握贪心算法的基本原理和高级技巧对于算法开发人员来说非常重要。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。在设计高性能系统时,贪心算法不仅可以用于解决找零问题,还可以结合其他算法(如动态规划、回溯等)一起使用,以构建更加灵活和高效的解决方案。此外,对于需要处理特殊情况的场景,可以通过添加适当的错误处理和日志记录来确保算法的健壮性和可靠性。通过扩展算法的输入和输出,可以使其适应更多的应用场景。原创 2024-10-23 02:46:38 · 966 阅读 · 0 评论 -
数据结构学习 链表
链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的引用。链表分为单链表和双链表,单链表的每个节点只有一个指向下一个节点的引用,而双链表的每个节点有两个引用,分别指向前一个节点和后一个节点。使用多指针可以减少不必要的遍历操作。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。在设计高性能系统时,链表不仅可以用于内存管理和动态数据结构,还可以结合其他数据结构(如栈、队列等)一起使用,以构建更加灵活和高效的解决方案。原创 2024-10-23 00:12:38 · 617 阅读 · 0 评论 -
数据结构 链表 反转链表
链表分为单链表和双链表,单链表的每个节点只有一个指向下一个节点的引用,而双链表的每个节点有两个引用,分别指向前一个节点和后一个节点。反转链表是指将链表中的节点顺序颠倒,使得原来的最后一个节点变成第一个节点,原来的第一个节点变成最后一个节点。例如,在某些排序算法中,反转链表可以减少不必要的比较和交换操作。此外,对于需要反转链表的部分节点或成对节点的场景,可以通过引入额外的指针来简化操作,提高代码的可读性和可维护性。有时候我们需要反转链表中的奇数节点和偶数节点,即奇数位置的节点和偶数位置的节点分别反转。原创 2024-10-22 21:15:26 · 606 阅读 · 0 评论 -
数据结构 队列介绍
基本概念与作用队列是什么?队列的作用Java中的队列实现示例一:使用LinkedList实现队列示例二:使用ArrayDeque实现队列示例三:使用PriorityQueue实现队列示例四:任务调度示例五:消息队列功能使用思路不同角度的功能使用任务调度消息队列缓冲区管理实际工作中的使用技巧拓展内容队列是一种先进先出(FIFO, First In First Out)的数据结构,它只允许在一端进行插入操作(入队),在另一端进行删除操作(出队)。原创 2024-10-22 19:14:44 · 650 阅读 · 0 评论 -
数据结构 栈基础
本文将详细介绍栈的基本概念、作用及其在Java中的实现方式,并通过多个示例来展示其在实际项目中的应用。总之,栈是数据结构中的一个重要组件,它不仅能帮助我们解决复杂的算法问题,还能简化多线程程序的设计,提高系统的性能和可靠性。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。在设计高性能系统时,栈不仅可以用于表达式求值和括号匹配,还可以结合其他数据结构(如队列、图等)一起使用,以构建更加灵活和高效的解决方案。而在需要线程安全的场景中,可以使用。原创 2024-10-22 16:05:16 · 779 阅读 · 0 评论 -
数据结构 双端队列
总之,双端队列是数据结构中的一个重要组件,它不仅能帮助我们解决复杂的算法问题,还能简化多线程程序的设计,提高系统的性能和可靠性。在设计高性能系统时,双端队列不仅可以用于数据缓存和滑动窗口算法,还可以结合其他数据结构(如哈希表、堆等)一起使用,以构建更加灵活和高效的解决方案。双端队列可以用于实现LRU缓存,其中最近使用的数据项被保留在队列前端,最不经常使用的数据项则被移除。双端队列可以用于实现最近最少使用(LRU)缓存,其中最近使用的数据项被保留在队列前端,最不经常使用的数据项则被移除。原创 2024-10-22 12:50:36 · 1075 阅读 · 0 评论 -
数据结构 阻塞队列
阻塞队列是一种特殊的队列,当队列为空时,尝试从队列中获取元素的操作将会被阻塞,直到队列中有新的元素加入;同样地,当队列已满时,试图向队列中添加新元素的操作也会被阻塞,直到队列中有空间可用。总之,阻塞队列是并发编程中的一个重要组件,它不仅能帮助我们解决线程间通信的问题,还能简化多线程程序的设计,提高系统的稳定性和可靠性。是一个基于数组的阻塞队列,它是一个固定大小的队列,当队列满时,插入操作会被阻塞;是一个不错的选择,但需要注意的是,由于它是无界的,因此在使用时应特别小心,避免因无限增长而导致内存泄露。原创 2024-10-22 10:41:28 · 665 阅读 · 0 评论 -
数据结构 二叉树
二叉树是由节点组成的一种树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的根节点没有父节点,而叶节点没有子节点。首先,我们需要定义一个二叉树的节点类。这个类将包含节点的值、左子节点和右子节点的信息。原创 2024-10-22 07:27:40 · 640 阅读 · 0 评论 -
算法学习 数据结构 堆
最大堆(Max Heap):每个节点的值都大于或等于其子节点的值。最小堆(Min Heap):每个节点的值都小于或等于其子节点的值。首先,我们需要定义一个堆节点类。这个类将包含节点的值以及左右子节点的信息。原创 2024-10-22 05:22:12 · 706 阅读 · 0 评论 -
二叉树 在二叉树中分配硬币
首先,我们需要定义一个二叉树的节点类。这个类将包含节点的值(硬币数量)、左子节点和右子节点的信息。原创 2024-10-22 02:28:52 · 895 阅读 · 0 评论 -
数据结构 进阶 二叉搜索树
二叉搜索树是一种特殊的二叉树,其每个节点包含一个键值和两个指向其他节点的引用(左子节点和右子节点)。对于任意节点 ( N ),其左子树中的所有节点的键值都小于 ( N ) 的键值。对于任意节点 ( N ),其右子树中的所有节点的键值都大于 ( N ) 的键值。这种特性使得二叉搜索树非常适合用于需要快速查找、插入和删除元素的场景。首先,我们定义一个二叉搜索树的节点类。这个类将包含节点的键值、父节点以及左右子节点的信息。原创 2024-10-22 00:17:38 · 749 阅读 · 0 评论 -
数据结构 树 AVL树
首先,我们需要定义一个AVL树的节点类,这个类应该包含节点的值、高度、父节点以及左右子节点的信息。self.height = 1 # 新节点初始化高度为1。原创 2024-10-21 21:18:12 · 733 阅读 · 0 评论 -
数据结构 树 红黑树
首先,我们定义一个红黑树的节点类。这个类将包含节点的颜色、值、父节点以及左右子节点的信息。self.color = color # 'red' 或 'black'原创 2024-10-21 18:46:06 · 856 阅读 · 0 评论 -
算法学习相向双指针
相向双指针是指在一个有序数组中,使用两个指针分别从数组的两端向中间移动,通过调整指针的位置来解决问题。这种方法特别适用于需要同时考虑数组两端元素的问题。原创 2024-10-21 16:30:04 · 1118 阅读 · 0 评论 -
链表学习反转链表
链表是一种线性数据结构,其中元素不是连续存储在内存中的,而是通过指针连接起来。每个节点包含两部分:数据域和指向下一个节点的指针域。链表分为单向链表和双向链表,本文主要讨论单向链表的反转。原创 2024-10-21 13:23:02 · 1009 阅读 · 0 评论 -
算法学习单调栈
单调栈是指栈内元素保持单调递增或单调递减顺序的一种栈结构。这种特性使得单调栈在解决某些特定类型的问题时表现出色,如寻找下一个更大或更小的元素、区间查询等。原创 2024-10-21 11:22:43 · 828 阅读 · 0 评论 -
Hash表无重复字符的最长字串
哈希表是一种非常有效的数据结构,它通过使用哈希函数将键映射到特定的位置,从而实现快速查找。哈希表的主要优势在于平均情况下插入和查找的时间复杂度都接近于O(1)。原创 2024-10-21 09:01:58 · 736 阅读 · 0 评论 -
算法学习——排序
排序算法是指将一组数据按照某种顺序(通常是升序或降序)排列的过程。排序算法的目的是使数据有序,便于后续的查找、统计等操作。原创 2024-10-21 08:41:26 · 1156 阅读 · 0 评论 -
数据结构最短路径
最短路径问题是指在一个加权图中,找到从源节点到目标节点的最短路径。这里的“最短”通常指的是路径上的权重之和最小。原创 2024-10-21 03:30:18 · 1090 阅读 · 0 评论 -
数据结构并查集
通过本文的介绍,希望读者能够对并查集及其相关问题有更深入的理解,并能够在实际项目中灵活运用这些算法。并查集作为一种高效的集合管理工具,不仅能够解决图的连通性问题,还能应用于许多其他类型的优化问题。在实际开发中,选择合适的并查集实现不仅需要考虑时间复杂度和空间复杂度,还需要考虑代码的可读性和可维护性。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。按秩合并是一种优化技术,通过在合并两个集合时总是将较小的树合并到较大的树上,从而保持树的高度较低。原创 2024-10-21 01:14:31 · 899 阅读 · 0 评论