代码随想录 Day 13 | 【第六章 二叉树】理论基础、递归遍历、迭代遍历、层序遍历

手把手教你解决Windows 10网络驱动器无法访问问题(附详细排查步骤) 本文详细指导Windows 10用户解决网络驱动器无法访问的常见问题。通过从现象快速定位到系统排查,提供了从检查网络连通性、修复凭据权限到调整高级设置的完整步骤,特别是针对“找不到网络路径”等错误,帮助用户高效恢复对共享资源的访问。 阅读详情

一、理论基础

需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义。

文章讲解:代码随想录

1. 二叉树的种类

(1)满二叉树:

        如果一棵树只有度为0和度为2的结点,并且度为0的结点在同一层,则这种二叉树为满二叉树。

(2)完全二叉树:底部从左到右连续

        在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1) 个节点。之前优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。

        满二叉树一定是完全二叉树。

(3)二叉搜索树

        树有了数值就是二叉搜索树,二叉搜索树是一个有序树。

        若左子树不为空,则左子树的所有结点都小于根结点的值;若右子树不为空,则右子树的所有结点都大于根结点的值;它的左右子树也分别为二叉排序树。

(4)平衡二叉搜索树(AVL)

        性质:1)是一颗空树;2)或它的左右两个子树的高度差的绝对值不超过1,并且左右两颗子树都是一棵平衡二叉树。

2. 二叉树的存储方式

(1)链式存储:指针,链式存储则是通过指针把分布在各个地址的节点串联一起。

(2)顺序存储:数组,顺序存储的元素在内存是连续分布的。

数组存储树如何进行遍历:如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。

3. 二叉树的遍历方式

(1)深度优先遍历:先往深走,遇到叶子结点再往回走。

  • 前序遍历(递归法,迭代法)
  • 中序遍历(递归法,迭代法)
  • 后序遍历(递归法,迭代法)

(2)广度优先遍历:一层一层去遍历。

  • 层次遍历(迭代法)

4. 二叉树的定义

        二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。

        二叉树是一种基础数据结构,在算法面试中都是常客,也是众多数据结构的基石。

        本篇我们介绍了二叉树的种类、存储方式、遍历方式以及定义,比较全面的介绍了二叉树各个方面的重点,帮助大家扫一遍基础。

        说到二叉树,就不得不说递归,很多同学对递归都是又熟悉又陌生,递归的代码一般很简短,但每次都是一看就会,一写就废。

5. 总结

二、递归遍历 (必须掌握)

二叉树的三种递归遍历掌握其规律后,其实很简单.

1. 整体思路及知识点

(1)确定递归函数的参数及返回值;

(2)确定终止条件;

(3)确定单层递归逻辑。

2. 细节思路

(1)首先,定义一个树结点类,定义一个初始化结点方法,传入self, val, left, right。

(2)在主类和主方法中,传入self,根结点root:首先定义一个空结果集result用于存放遍历过的结点;接下来定义一个深度优先遍历dfs方法,采用前序遍历对传入的根结点进行遍历;前序遍历的顺序是中-->左-->右,所以首先遍历的是根结点,将根结点的值传入结果集中,再遍历左结点,最后遍历左结点;

(3)调用dfs方法,传入给定的根结点,最后返回结果集。

(4)前中序遍历代码基本一致,只有中间结点遍历顺序不同。

3. 代码

(1)前序遍历:

class TreeNode:
    def _init_(self, val = 0, left = None, right = None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def preorderTraversal(self, root:Optional[TreeNode])-->List[int]:
        result = []
        def dfs(node):
            if node is None:
                return
            result.append(node.val)
            dfs(node.left)
            dfs(node.right)
        dfs(root)
        return result
    
    

(2)后序遍历:同前序遍历,只需交换中间结点遍历位置。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        res = []
        def dfs(node):
            if node is None:
                return
            dfs(node.left)
            dfs(node.right)
            res.append(node.val)
        dfs(root)
        return res

(3)中序遍历:同前序遍历,只需交换中间结点遍历位置。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        res = []

        def dfs(node):
            if node is None:
                return
            dfs(node.left)
            res.append(node.val)
            dfs(node.right)
        dfs(root)
        return res

三、迭代遍历 (基础不好的录友,迭代法可以放过)

1. 前序遍历/后序遍历

        整体思路:

        前序遍历的顺序是中左右,但用栈实现时,由于栈的数据结构是先进后出,所以先处理中间结点,存入结果集,并且从栈中弹出,再去遍历右子结点,将其添加进栈中,最后加入左结点,这样栈在弹出的时候就是先出左结点,再出右结点。

        后序遍历的顺序是左右中,只需要在前序遍历代码的基础上,先进栈左结点,后进栈右结点,最后反转一下结果集即可。

        a. 前序遍历:

class Solution:
    def preorderTraversal(self,root:Optional[TreeNode])->List[int]:
        if not root:
            return []
        res = []
        stack = [root]
        while stack:
            node = stack.pop()
            res.append(node.val)
            
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
        return res

        b. 后序遍历: 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        res = []
        stack = [root]
        while stack:
            node = stack.pop()
            res.append(node.val)
            if node.left:
                stack.append(node.left)
            if node.right:
                stack.append(node.right)
        return res[::-1]

2. 中序遍历

        整体思路:先遍历左子树,将结点全部加入栈中,一直到左结点为空也就是遍历到左子树的叶子结点;然后将栈顶结点弹出,再将当前待处理的结点的值加入结果集,然后将当前结点的指针移动至右结点;最后返回result。

        注意事项:需要一个cur指针来指向当前遍历的结点。

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        res = []
        stack = []
        cur = root
        while cur or stack:
            if cur:
                stack.append(cur)
                cur = cur.left
            else:
                cur = stack.pop()
                res.append(cur.val)
                cur = cur.right
        return res
                

四、层序遍历

看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。

1. 102.二叉树的层序遍历

(1)双数组法

        首先对传入的根结点是否为空进行异常值处理;然后定义存放结果集的数组ans,cur指针指向当前遍历的数组,为其传入根结点。

        然后,只要cur不为空就循环遍历,首先定义空数组vals用于存放当前层,空数组nxt用于存放下一层。首先遍历当前层的元素,将当前层的元素加入当前层vals;如果其左孩子不为空,则将左孩子加入下一层,如果右孩子不为空,则将右孩子加入下一层;然后将当前层的指针指向下一层,将当前层的数组添加至结果集。

        最后返回结果集。

class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if root is None:
            return []
        ans = []
        cur = [root]
        while cur:
            vals = []
            nxt = []
            for node in cur:
                vals.append(node.val)
                if node.left: nxt.append(node.left)
                if node.right: nxt.append(node.right)
            cur = nxt
            ans.append(vals)
        return ans

        

(2)队列法

class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if root is None:
            return []
        res = []
        q = deque([root])
        while q:
            vals = []
            for _ in range(len(q)):
                node = q.popleft()
                vals.append(node.val)
                if node.left: q.append(node.left)
                if node.right: q.append(node.right)
            res.append(vals)
        return res

2. 107.二叉树的层序遍历(二)

        只需要在102题目中最后输出时反转一下数组即可。

队列法:

class Solution:
    def levelOrderBottom(self, root:Optional[TreeNode])->List[List[int]]:
        if root is None:
            return []

        res = []
        q = deque([root])

        while q:
            vals = []
            for _ in range(len(q)):
                node = q.popleft()
                vals.append(node.val)
                if node.left: q.append(node.left)
                if node.right: q.append(node.right)
            res.append(vals)
        return res[::-1]

3. 199.二叉树的右视图

        层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。

class TreeNode:
    def _init_(self, val = 0, left = None, right = None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def rightSideView(self, root: TreeNode)->List[int]:
        if root is None:
            return []
        q = deque([root])
        view = []
        while q:
            length=len(q)
            for i in range(length):
                node = q.popleft()
                if i == length - 1:
                    view.append(node.val)
                if node.left: q.append(node.left)
                if node.right: q.append(node.right)
        return view

4. 637.二叉树的层平均值

        本题就是层序遍历的时候把一层求个总和再取一个均值。

class Solution:
    def averageOfLevels(self, root:TreeNode)->List[float]:
        if root is None:
            return []
        q = deque([root])
        res = []
        
        while q:
            length = len(q)
            sum = 0
            for i in range(length):
                node = q.popleft()
                sum += node.val
            
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
            res.append(sum/length)
        return res
        
            

5. 429.N叉树的层序遍历

        这道题依旧是模板题,只不过一个节点有多个孩子了。

class TreeNode:
    def _init_(self, val = None, children = None):
        self.val = val
        self.children = children
class Solution:
    def levelOrder(self, root:'Node')->List[List[int]]:
        if root is None:
            return []
        q = deque([root])
        res = []
        while q:
            length = len(q)
            vals = []
            for i in range(length):
                node = q.popleft()
                vals.append(node.val)
                for child in node.children:
                    q.append(child)
            res.append(vals)
        return res

6. 515.在每个树行中找最大值

        层序遍历,取每一层的最大值。

class TreeNode:
    def __init__(self, val = 0, left = None, right = None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def largestValues(self, root:Optional[TreeNode])->List[int]:
        if root is None:
            return []
        q = deque([root])
        res = []
        while q:
            length = len(q)
            max_val = float('-inf')

            for i in range(length):
                node = q.popleft()
                max_val = max(max_val, node.val)
                if node.left: q.append(node.left)
                if node.right: q.append(node.right)
            res.append(max_val)
        return res

7. 116.填充每个节点的下一个右侧结点指针

        本题依然是层序遍历,只不过在单层遍历的时候记录一下本层的头部节点,然后在遍历的时候让前一个节点指向本节点就可以了。

class Node:
    def __init__(self, val: int = 0, left: 'Node'=None, right:'Node'=None, next:'Node'=None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
class Solution:
    def connect(self, root:'Node')->'Node':
        if root is None:
            return root
        q = deque([root])
        while q:
            length = len(q)
            prev = None
            for i in range(length):
                node = q.popleft()
                if prev: prev.next = node
                prev = node
                if node.left: q.append(node.left)
                if node.right: q.append(node.right)
        return root
            

8. 117.填充每个节点的下一个右侧结点指针(二)

        这道题目说是二叉树,但116题目说是完整二叉树,其实没有任何差别,一样的代码一样的逻辑。

class Solution:
    def connect(self, root: 'Node') -> 'Node':
        if root is None:
            return root
        q = deque([root])
        while q:
            length = len(q)
            prev = None
            for i in range(length):
                node = q.popleft()
                if prev: prev.next = node
                prev = node
                if node.left: q.append(node.left)
                if node.right: q.append(node.right)
        return root
         

9. 104.二叉树的最大深度

        层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        l_depth = self.maxDepth(root.left)
        r_depth = self.maxDepth(root.right)
        depth = max(l_depth, r_depth)+1
        return depth

10. 111.二叉树的最小深度

        相对于 104.二叉树的最大深度 ,本题还也可以使用层序遍历的方式来解决,思路是一样的。

        需要注意的是,只有当左右孩子都为空的时候,才说明遍历的最低点了。如果其中一个孩子为空则不是最低点。

        注意:在求二叉树的最小深度时,代码的逻辑需要处理叶子节点的情况当某个子树为空时,不可以直接使用该子树的深度为0来计算最小深度,需要在计算最小深度时考虑子树为空的特殊情况。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        if root.left is None:
            return self.minDepth(root.right)+1
        if root.right is None:
            return self.minDepth(root.left)+1

        l_depth = self.minDepth(root.left)
        r_depth = self.minDepth(root.right)
        depth = min(l_depth,r_depth)+1
        return depth

【AI赋能】Sora + CapCut 打造爆款短视频:从脚本到发布的自动化工作流 本文详细介绍了如何利用Sora、Grok和CapCut等AI工具构建自动化短视频生产工作流。通过结构化Prompt生成专业脚本,借助Sora将文字转化为高质量视频素材,并利用CapCut进行高效剪辑与合成,实现从创意到发布的十倍效率提升,助力个人及团队打造爆款内容。 阅读详情

相关推荐

【WRF-CMAQ实战指南】从环境配置到测试案例运行全解析

本文详细解析了WRF-CMAQ从环境配置到测试案例运行的全过程,包括系统环境检查、依赖库安装、源码获取与项目初始化、关键配置技巧、编译实战与排错、测试案例运行验证等关键步骤。通过实战指南,帮助用户快速掌握WRF-CMAQ的安装和运行技巧,提升空气质量模拟的效率。

year5的博客 244

代码随想录算法训练营day13(python版)|第六章 二叉树part01| 递归遍历 · 迭代遍历 · 统一迭代 · 层序遍历

目录理论基础递归遍历 (必须掌握)思路迭代遍历 (基础不好的录友,迭代法可以放过)举例中序统一迭代 (基础不好的录友,迭代法可以放过)层序遍历题目链接/文章讲解/视频讲解:代码随想录102.二叉树的层序遍历(opens new window)107.二叉树的层次遍历II(opens new window)199.二叉树的右视图(opens new window)637.二叉树的层平均值(opens new window)429.N叉树的层序遍历(opens new window)515.在每个树行中找最大值

qq_43752779的博客 1053

C#实战:手把手教你用SerialPort实现RS485 ModbusRTU通信(附完整代码)

本文详细介绍了如何使用C#的SerialPort类实现RS485 ModbusRTU通信,包括硬件准备、串口配置、数据收发核心逻辑及高级通信技巧。通过实战案例和完整代码,帮助开发者快速掌握工业级通信框架的构建方法,提升设备间通信的稳定性和效率。

weixin_29207533的博客 255

代码随想录day13|二叉树相关题目,前中后序遍历、层序遍历

​ 二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,下面重点看链式存储的二叉树节点的定义方式。int val;可以发现二叉树的定义和链表的定义是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。二叉树的理论基础。二叉树的遍历方式:前中后序遍历 =》(深度优先遍历),层序遍历=》(广度优先遍历)迭代遍历与层序遍历。

LuckyYH__的博客 898

STM32CubeMX+Keil5实战:手把手教你用STM32F103C8T6开发扫地机器人(附完整代码)

本文详细介绍了如何使用STM32F103C8T6开发智能扫地机器人,从STM32CubeMX配置到Keil5代码实现的全过程。涵盖硬件选型、时钟树配置、GPIO外设设置、电机驱动、超声波测距及自动避障算法等核心内容,并提供完整代码示例,助力开发者快速掌握智能硬件开发技巧。

weixin_30329623的博客 81

DFT实战:如何用Synopsys工具搞定多时钟域Scan Chain设计(附避坑指南)

本文详细解析了使用Synopsys DFT Compiler工具链实现多时钟域Scan Chain设计的全流程,包括时钟混合策略、跨时钟域平衡技巧和实战脚本剖析。通过量产验证的工程实践方案,帮助DFT工程师有效解决复杂SoC设计中的Scan Chain挑战,提升测试效率和质量。

mm9012的博客 1033

我的 LeetCode 日记:Day 13 - 深入探索,二叉树的世界

这些遍历方法是后续所有二叉树问题的基础,今天的学习为我后面的征程铺平了道路。树形结构在计算机科学中无处不在,从文件系统到数据库索引,再到无数算法的底层逻辑,它们是表示层级关系的不二之选。今天的第一项任务,也是最基础、最核心的一项,就是。虽然递归写法简洁,但迭代法能让我更深刻地理解遍历的底层过程,并且能避免在树过深时发生栈溢出。: 最巧妙,可以通过模拟前序(中->右->左)的顺序遍历,最后将结果列表反转得到(左->右->中)。: 较复杂,需要指针辅助,一路向左将节点压栈,到底后弹出一个处理,再转向右子树。

m0_54812357的博客 1037

Wio-LR1121多频段LoRa模块技术解析与应用实践

LoRa技术作为低功耗广域物联网(LPWAN)的核心通信方案,通过独特的扩频调制技术实现远距离传输与强抗干扰能力。其工作原理基于CSS(Chirp Spread Spectrum)调制,支持动态调整扩频因子(SF)和带宽(BW)来平衡传输距离与数据速率。Wio-LR1121模块作为Semtech LR1121芯片的载体,创新性地整合了sub-GHz、S-Band和2.4GHz多频段支持,配合仅1.35μA的睡眠电流,为跨境物联网部署提供了硬件基础。在智慧农业、工业监测等场景中,开发者可通过SPI接口快速集成

weixin_33742618的博客 416

代码随想录 day13

然后上述方法其实就是BFS,然后有几个点需要注意,再写代码的时候,size的初始化同意可以放在while里面,然后在加入左右孩子的时候,先判断是否为空,为空的话就不需要加入,这样也可以比卖你后续从队列里面读取节点的时候,读到空姐i的那,然后,我发现这道题目其实在返回的时候,没有nill节点的一个比奥是,也就是答案案例吗其实没有null,但是在一些题目的结果中会出现null。其次我们需要把节点的值进行打印,那么需要一个数组去存储节点的值,然后,使用递归遍历,我觉得可以从大一点的角度去看待代码的书写。

vymih的博客 1056

python实现MACD策略背离点的判断 (附完整源码)

python实现MACD策略背离点的判断 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 666

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能。本篇文章主要介绍如何使用xlwings对Excel表格进行多行多列数据设置和操作,并给出相应的源代码。接着,我们可以对这个范围内的所有单元格进行操作,如设置字体颜色、填充颜色、对齐方式等。以上就是使用xlwings对Excel表格进行多行多列数据操作和设置字体颜色、填充色和对齐方式的全部内容。最后,我们可以将数据写入到单元格中,也可以从单元格中读取数据。在Excel中,可以通过。

BUG?不存在的! 713

Day13 | 第六章 二叉树 Part01

二叉树的基本概念、递归法/迭代法遍历模板

m0_52313564的博客 999

【WRF-Urban】使用 CGLC-MODIS-LCZ_100m 数据集运行 WRF 时的城市参数化问题

【WRF-Urban】使用 CGLC-MODIS-LCZ_100m 数据集运行 WRF 时的城市参数化问题

WW、forever的博客 711

代码随想录 | day 13 | 第六章 二叉树part01

用栈的步骤模拟一遍前中后序遍历,关键是在cur==NULL的时候return,接着返回栈的之前保存的地址接着往下执行,详情请参考。

ZHLCHLC的博客 658

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

代码训练营 day13|LeetCode 144,LeetCode 94,LeetCode 145,LeetCode 102

今天主要学习了二叉树的一系列操作,很难啊,树和图一直是我不太熟的内容。但是今天努力学习了迭代遍历树的算法,统一遍历太厉害了。明天早上起来再做一遍加油,坚持打卡的第十天。

qq_44639909的博客 1122

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

代码随想录day13

理论基础第六章。

cookieeee_的博客 272

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

代码随想录 day 13 二叉树

看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义。这是统一迭代法的写法, 如果学有余力,可以掌握一下。二叉树的三种递归遍历掌握其规律后,其实很简单。

weixin_45549711的博客 516

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 187

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 281

数据结构的基本概念和算法的初步认识

本文系统阐述数据结构与算法的基础概念,涵盖数据、数据元素、数据对象的层次关系,数据结构的三要素(逻辑结构、存储结构、数据运算),以及抽象数据类型。重点解析算法的特性与设计要求,并深入讲解时间复杂度分析的核心——大O表示法,通过“只保留最高阶项、忽略常数系数、取最坏情况”三大原则,结合实例剖析O(1)、O(n)等常见时间复杂度,揭示算法效率的本质评估方法。

ACH_YYX的博客 188

数据结构:9.Map和Set

有的讲解会说这里key是标识作用,这种说法其实没有太大意义,就算知道了他是标识value的作用又如何,在实际的使用过程中,我们只会根据具体的效果选择使用的方法等,不会执着于“标识”这种说法。2.由于哈希函数的设计原则太过理论,它仅仅是在认为:这些通过关键码算出来的index不同 的情况下设计的,然而这种理论化的设计原则在遇到冲突时,恰恰就出现了问题,而我们能做的,就是降低冲突率。虽然哈希表的使用过程中存在冲突,但是在实际的使用过程中,哈希表的冲突率是不高的,冲突的个数是可控的。

2602_95646088的博客 201

Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构

本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。

NanChen的博客 343

排序算法深度笔记(上):比较类排序的思想演进与代码实现

与。本文聚焦前者 —— 也就是通过元素间两两比较来确定相对顺序的排序算法,从最朴素的 O (n²) 基础排序,到工业级主流的 O (nlogn) 进阶排序,逐层拆解设计思想、带注释的代码实现与边界细节。当我们理解了比较排序的性能边界,也就自然引出了非比较排序的存在意义。所有代码均遵循统一的实现规范:入口函数前置空数组与单元素边界校验,基于数组原地修改,主函数附带可直接运行的测试用例,与练习代码风格完全对齐。

2401_87069538的博客 611

CF2283F[数据结构]

首先考虑一种暴力解法,当我们建好i之前的图后,当我们添加i的时候,区间[li,ri]中的点都会向i建边,但是这些点中,如果有某两个顶点l,r,满足l<r,那么l就可以通过r间接到达i,因此可以删除l到i的边;初始时我们令所有点放入set中,然后对于每一个i的处理,我们将集合中仍在[l,r]的范围的点弹出,并且将f设置为i,这样我们就得到了所有点的最小跳板;对于每个区间[l,r] 我们要计算这下下标中的f(v)中大于r的数目有多少个;我们令f(v)表示顶点v可到达的最小的顶点;

蒟蒻 138

笔记-论数据结构2

typedef 数据类型 别名return 0;typedef也经常用在结构体上:每次声明结构体变量都要写struct关键字,很麻烦,而且逻辑上也很难受,typedef可以解决这个问题。int x;int y;p.x = 5;p.y = 10;return 0;而利用typedef解决有两种解法:typedef struct 结构体名数据类型 变量名;数据类型 变量名;……}别名;数据类型 变量名;数据类型 变量名;……}别名;实际的运用int x;

fish_zzzz的博客 111

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 85
上一篇: 代码随想录 Day 11 | 【第五章 栈与队列】150.逆波兰表达式求值、239.滑动窗口最大值、347.前 K 个高频元素、总结
下一篇: 代码随想录 Day 14 | 【第六章 二叉树】 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
Accept17
博客等级 码龄4年 479粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值