二叉树的层序遍历(含八道leetcode相关题目)

news2024/9/23 4:27:58

文章目录

  • 二叉树层序遍历模板
  • 102. 二叉树的层序遍历
  • 107. 二叉树的层序遍历 II
  • 199. 二叉树的右视图
  • 637. 二叉树的层平均值
  • 515. 在每个树行中找最大值
  • 429. N 叉树的层序遍历
  • 116. 填充每个节点的下一个右侧节点指针
  • 117. 填充每个节点的下一个右侧节点指针 II

二叉树层序遍历模板

我们之前讲过了关于二叉树的深度优先遍历的文章:前中后序遍历的递归法和迭代法。

接下来我们再来介绍二叉树的另一种遍历方式:层序遍历

层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。

需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。

而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。

在这里插入图片描述
如图所示:将每层的元素从左至右加入队列,取出时就会先取出左节点,并将当前节点的左右节点又加入队尾,接着从队列取出下一个元素,将它的左右节点同样加入队尾,以此类推。那怎么确认取出多少个元素的时候可认为当前层的元素都取完了呢?这就需要一个变量来记录啦,这个变量其实就是每轮循环开始时队列的长度,当前长度就是当前层的所有元素,该轮循环的后续操作就是将下一层的所有节点加入队尾。

这样就实现了层序从左到右遍历二叉树。

代码如下:这份代码也可以作为二叉树层序遍历的模板,打十个就靠它了。

Go代码如下

102. 二叉树的层序遍历

迭代法

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) [][]int {
    if root == nil {
        return [][]int{}
    }

    res := make([][]int,0)
    queue := make([]*TreeNode,0)
    queue = append(queue,root)
    for len(queue) != 0 {
        // 当前层的元素个数,以及定义存当前层结果的数组
        queueSize := len(queue)
        curLevelRes := make([]int,0)
        // 取出当前层所有元素,并依次加入下一层的元素
        for i := 0; i < queueSize ;i++ {
            curNode := queue[0]
            queue = queue[1:len(queue)]
            curLevelRes = append(curLevelRes,curNode.Val)
            // 当前节点的左右节点加入队列
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
        // 当前层遍历完成,将当前层结果加入最终结果中
        res = append(res,curLevelRes)
    }

    return res
}

递归法

// 层序遍历递归法
func levelOrder(root *TreeNode) [][]int {
    if root == nil {
        return [][]int{}
    }

    res := make([][]int,0)
    preOrder(root,0,&res) //根节点在第0层

    return res
}

/*直接使用二叉树的前序遍历的递归形式即可,只是递归的时候,要多传一个参数,
 就是该节点属于第几层的,很简单,子节点所在层数是父节点所在层数加一*/
func preOrder(node *TreeNode,level int,res *[][]int) {
    //如果level是新层,则在res中继续添加一个[]int用于存这一次的结点的值
    if len(*res) == level {
        culLevelRes := make([]int,0)
        *res = append(*res,culLevelRes)
    }

    //将结点的值添加到res中对应的层的[]int中
    (*res)[level] = append((*res)[level],node.Val)
    //递归遍历左右子节点
    if node.Left != nil {
        preOrder(node.Left,level + 1,res)
    }
    if node.Right != nil {
        preOrder(node.Right,level + 1,res)
    }
}

在这里插入图片描述

102. 二叉树的层序遍历

102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000] 内
  • -1000 <= Node.val <= 1000

Go 代码迭代法

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) [][]int {
    if root == nil {
        return [][]int{}
    }

    res := make([][]int,0)
    queue := make([]*TreeNode,0)
    queue = append(queue,root)
    for len(queue) != 0 {
        // 当前层的元素个数,以及定义存当前层结果的数组
        queueSize := len(queue)
        curLevelRes := make([]int,0)
        // 取出当前层所有元素,并依次加入下一层的元素
        for i := 0; i < queueSize ;i++ {
            curNode := queue[0]
            queue = queue[1:len(queue)]
            curLevelRes = append(curLevelRes,curNode.Val)
            // 当前节点的左右节点加入队列
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
        // 当前层遍历完成,将当前层结果加入最终结果中
        res = append(res,curLevelRes)
    }

    return res
}

在这里插入图片描述

Go代码递归法

// 层序遍历递归法
func levelOrder(root *TreeNode) [][]int {
    if root == nil {
        return [][]int{}
    }

    res := make([][]int,0)
    preOrder(root,0,&res) //根节点在第0层

    return res
}

/*直接使用二叉树的前序遍历的递归形式即可,只是递归的时候,要多传一个参数,
 就是该节点属于第几层的,很简单,子节点所在层数是父节点所在层数加一*/
func preOrder(node *TreeNode,level int,res *[][]int) {
    //如果level是新层,则在res中继续添加一个[]int用于存这一次的结点的值
    if len(*res) == level {
        culLevelRes := make([]int,0)
        *res = append(*res,culLevelRes)
    }

    //将结点的值添加到res中对应的层的[]int中
    (*res)[level] = append((*res)[level],node.Val)
    //递归遍历左右子节点
    if node.Left != nil {
        preOrder(node.Left,level + 1,res)
    }
    if node.Right != nil {
        preOrder(node.Right,level + 1,res)
    }
}

在这里插入图片描述

107. 二叉树的层序遍历 II

107. 二叉树的层序遍历 II

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例 1:
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]
 

提示:

  • 树中节点数目在范围 [0, 2000] 内
  • -1000 <= Node.val <= 1000

Go代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrderBottom(root *TreeNode) [][]int {
    // 和102题一样,就是普通的层序遍历,不过遍历完成后,结果需要倒序一下
    if root == nil {
        return [][]int{}
    }

    res := make([][]int,0)
    queue := make([]*TreeNode,0)
    queue = append(queue,root)

    for len(queue) > 0 {
        queueSize := len(queue)
        curLevelRes := make([]int,0)
        for i := 0;i < queueSize;i++{
            curNode := queue[0]
            queue = queue[1:]
            curLevelRes = append(curLevelRes,curNode.Val)
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
        res = append(res,curLevelRes)
    }

    // 反转结果
    left := 0
    right := len(res)-1
    for left < right {
        res[left],res[right] = res[right],res[left]
        left++
        right--
    }

    return res
}

在这里插入图片描述

199. 二叉树的右视图

199. 二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

在这里插入图片描述

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:

输入: [1,null,3]
输出: [1,3]

示例 3:

输入: []
输出: []

提示:

  • 二叉树的节点个数的范围是 [0,100]
  • -100 <= Node.val <= 100

Go代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func rightSideView(root *TreeNode) []int {
    // 层序遍历之后,返回每层最后一个元素即可
    if root == nil {
        return []int{}
    }

    res := make([]int,0)
    queue := make([]*TreeNode,0)
    queue = append(queue,root)

    for len(queue) > 0 {
        queueSize := len(queue)
        curLevelRes := make([]int,0)
        for i := 0;i < queueSize;i++{
            curNode := queue[0]
            queue = queue[1:]
            curLevelRes = append(curLevelRes,curNode.Val)
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
        // 只保留当前层最右边的元素,即当前层最后一个元素
        res = append(res,curLevelRes[len(curLevelRes) - 1])
    }

    return res
}

在这里插入图片描述

637. 二叉树的层平均值

637. 二叉树的层平均值

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 1 0 − 5 10^{-5} 105 以内的答案可以被接受。

示例 1:
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[3.00000,14.50000,11.00000]
解释:第 0 层的平均值为 3,1 层的平均值为 14.5,2 层的平均值为 11 。
因此返回 [3, 14.5, 11]

示例 2:
在这里插入图片描述

输入:root = [3,9,20,15,7]
输出:[3.00000,14.50000,11.00000]

提示:

  • 树中节点数量在 [1, 104] 范围内
  • -2^31 <= Node.val <= 2^31 - 1

Go代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func averageOfLevels(root *TreeNode) []float64 {
    // 层序遍历之后,返回每层的平均值即可
    if root == nil {
        return []float64{}
    }

    res := make([]float64,0)
    queue := make([]*TreeNode,0)
    queue = append(queue,root)

    for len(queue) > 0 {
        queueSize := len(queue)
        curLevelRes := make([]int,0)
        for i := 0;i < queueSize;i++{
            curNode := queue[0]
            queue = queue[1:]
            curLevelRes = append(curLevelRes,curNode.Val)
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
        // 只保留当前层最右边的元素,即当前层最后一个元素
        res = append(res,getAvgOfArr(curLevelRes))
    }

    return res
}

func getAvgOfArr(arr []int) float64 {
    sum := 0
    for _,num:= range arr {
        sum += num
    }
    
    return float64(sum) / float64(len(arr))
}

在这里插入图片描述

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

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

给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

示例1:

输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]

示例2:

输入: root = [1,2,3]
输出: [1,3]

提示:

  • 二叉树的节点个数的范围是 [ 0 , 1 0 4 ] [0,10^4] [0,104]
  • − 2 31 < = N o d e . v a l < = 2 31 − 1 -2^{31} <= Node.val <= 2^{31} - 1 231<=Node.val<=2311

Go代码

代码和637题几乎一样

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func largestValues(root *TreeNode) []int {
    // 层序遍历之后,返回每层的最大值即可
    if root == nil {
        return []int{}
    }

    res := make([]int,0)
    queue := make([]*TreeNode,0)
    queue = append(queue,root)

    for len(queue) > 0 {
        queueSize := len(queue)
        curLevelRes := make([]int,0)
        for i := 0;i < queueSize;i++{
            curNode := queue[0]
            queue = queue[1:]
            curLevelRes = append(curLevelRes,curNode.Val)
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
        // 只保留当前层最右边的元素,即当前层最后一个元素
        res = append(res,getMaxOfArr(curLevelRes))
    }

    return res
}

func getMaxOfArr(arr []int) int {
    maxVal := arr[0]
    for _,num:= range arr {
        if num > maxVal {
            maxVal = num
        }
    }
    
    return maxVal
}

在这里插入图片描述

429. N 叉树的层序遍历

429. N 叉树的层序遍历

给定一个N叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由null值分隔(参见示例)。

示例 1:

在这里插入图片描述

输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]

示例 2:
在这里插入图片描述

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

提示:

  • 树的高度不会超过 1000
  • 树的节点总数在 [0, 10^4] 之间

Go 代码

/**
 * Definition for a Node.
 * type Node struct {
 *     Val int
 *     Children []*Node
 * }
 */

func levelOrder(root *Node) [][]int {
    // 思路和102题二叉树的层序遍历是一模一样的
    if root == nil {
        return [][]int{}
    }

    res := make([][]int,0)
    queue := make([]*Node,0)
    queue = append(queue,root)

    for len(queue) > 0 {
        curLevelRes := make([]int,0)
        queueSize := len(queue)
        for i := 0;i < queueSize;i++ {
            curNode := queue[0]
            queue = queue[1:]
            curLevelRes = append(curLevelRes,curNode.Val)
            // 下一层,与二叉树层序遍历的唯一区别
            for j := 0;j < len(curNode.Children);j++{
                queue = append(queue,curNode.Children[j])
            }
        }
        res = append(res,curLevelRes)
    }

    return res
}

在这里插入图片描述

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

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

给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

示例 1:
在这里插入图片描述

输入:root = [1,2,3,4,5,6,7]
输出:[1,#,2,3,#,4,5,6,7,#]
解释:给定二叉树如图 A所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next指针连接,‘#’ 标志着每一层的结束。

示例 2:

输入:root = []
输出:[]

提示:

  • 树中节点的数量在 [0, 2^12 - 1] 范围内
  • -1000 <= node.val <= 1000

进阶:

  • 你只能使用常量级额外空间。
  • 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。

Go 代码

/**
 * Definition for a Node.
 * type Node struct {
 *     Val int
 *     Left *Node
 *     Right *Node
 *     Next *Node
 * }
 */

func connect(root *Node) *Node {
	    if root == nil {
        return nil
    }

    queue := make([]*Node,0)
    queue = append(queue,root)
    for len(queue) != 0 {
        // 当前层的元素个数,以及定义存当前层结果的数组
        queueSize := len(queue)
        curLevelRes := make([]*Node,0)
        // 取出当前层所有元素,并依次加入下一层的元素
        for i := 0; i < queueSize ;i++ {
            curNode := queue[0]
            queue = queue[1:]
            curLevelRes = append(curLevelRes,curNode)
            // 当前节点的左右节点加入队列
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
        // 当前层遍历完成,当前层的节点前一个节点的Next连接同层节点的下一个节点
        for i := 0;i < len(curLevelRes) - 1;i++ {
            curLevelRes[i].Next = curLevelRes[i+1]
        }
    }

    return root
}

在这里插入图片描述

117. 填充每个节点的下一个右侧节点指针 II

117. 填充每个节点的下一个右侧节点指针 II

给定一个二叉树:

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

示例 1:

在这里插入图片描述

输入:root = [1,2,3,4,5,null,7]
输出:[1,#,2,3,#,4,5,7,#]
解释:给定二叉树如图 A所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),‘#’ 表示每层的末尾。

示例 2:

输入:root = []
输出:[]

提示:

  • 树中的节点数在范围 [0, 6000] 内
  • -100 <= Node.val <= 100

进阶:

  • 你只能使用常量级额外空间。
  • 使用递归解题也符合要求,本题中递归程序的隐式栈空间不计入额外空间复杂度。

Go代码

与116题代码一模一样

/**
 * Definition for a Node.
 * type Node struct {
 *     Val int
 *     Left *Node
 *     Right *Node
 *     Next *Node
 * }
 */

func connect(root *Node) *Node {
	    if root == nil {
        return nil
    }

    queue := make([]*Node,0)
    queue = append(queue,root)
    for len(queue) != 0 {
        // 当前层的元素个数,以及定义存当前层结果的数组
        queueSize := len(queue)
        curLevelRes := make([]*Node,0)
        // 取出当前层所有元素,并依次加入下一层的元素
        for i := 0; i < queueSize ;i++ {
            curNode := queue[0]
            queue = queue[1:]
            curLevelRes = append(curLevelRes,curNode)
            // 当前节点的左右节点加入队列
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
        // 当前层遍历完成,当前层的节点前一个节点的Next连接同层节点的下一个节点
        for i := 0;i < len(curLevelRes) - 1;i++ {
            curLevelRes[i].Next = curLevelRes[i+1]
        }
    }

    return root
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习笔记(8)预训练模型

深度学习笔记&#xff08;8&#xff09;预训练模型 文章目录 深度学习笔记&#xff08;8&#xff09;预训练模型一、预训练模型构建一、微调模型&#xff0c;训练自己的数据1.导入数据集2.数据集处理方法3.完形填空训练 使用分词器将文本转换为模型的输入格式参数 return_tenso…

C++迭代器 iterator详解

目录 什么是迭代器 迭代器的类型 迭代器的用法 三种迭代器 范围for 什么是迭代器 它提供了一种访问容器&#xff08;如列表、集合等&#xff09;中元素的方法&#xff0c;而无需暴露容器的内部表示。迭代器使得程序员能够以统一的方式遍历不同的数据结构&#xff0c;而无需…

项目集成sharding-jdbc

目录 项目集成sharding-jdbc 1.业务分析 2.数据库构建 3.分库分表策略 项目配置默认数据源 一&#xff1a;导入sharding-jdbc依赖 二&#xff1a;在application文件中编写配置 三&#xff1a;注释掉主配置文件中配置的数据源 注意&#xff1a;这里添加了spring.main.allow…

基于51单片机的矿井安全检测系统

基于51单片机的矿井安全检测系统使用51单片机作为系统主控&#xff0c;LCD1602进行显示同时系统集成了ADC0808和烟雾传感器、甲烷传感器&#xff0c;二者结合测量环境烟雾值&#xff0c;同时使用DHT11温湿度传感器获取环境温湿度值&#xff0c;使用L298N驱动风扇&#xff0c;利…

2009考研数学真题解析-数二:

第一题&#xff1a; 解析&#xff1a;先找间断点&#xff1a;分母不能等于0&#xff0c;分母是sinΠx&#xff0c; 因此不难看出间断点是x0&#xff0c;-1&#xff0c;-2&#xff0c;-3。。。。。 接着一个一个来算这些点是什么间断点。 &#xff0c;从x趋于2开始&#xff0c;分…

2024年一区极光优化+分解+深度学习!VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测

2024年一区极光优化分解深度学习&#xff01;VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测 目录 2024年一区极光优化分解深度学习&#xff01;VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.中秋献礼&#…

FiBiNET模型实现推荐算法

1. 项目简介 A031-FiBiNET模型项目是一个基于深度学习的推荐系统算法实现&#xff0c;旨在提升推荐系统的性能和精度。该项目的背景源于当今互联网平台中&#xff0c;推荐算法在电商、社交、内容分发等领域的广泛应用。推荐系统通过分析用户的历史行为和兴趣偏好&#xff0c;预…

小球轻重的测量

设有12个小球。其中11个小球的重量相同&#xff0c;称为好球&#xff1b;有一个小球的重量与11个好球的重量不同&#xff08;或轻或重&#xff09;&#xff0c;称这个小球为坏球。试编写一个算法&#xff0c;用一个无砝码的天平称三次找出这个坏球&#xff0c;并确定其比好球轻…

GAMES101(15节,辐射,BRDF)

Irradiance辐射度量学 辐射度量学在渲染领域&#xff0c;可以帮助理解基于物理的光照模型 radiant energy辐射能量Q&#xff0c;累计总能量&#xff08;单位J joule焦耳&#xff09;&#xff0c;就像太阳能板&#xff0c;光照时间越长接收能量越多&#xff0c;收到的能量总和…

02_RabbitMQ消息丢失解决方案及死信队列

一、数据丢失 第一种&#xff1a;生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候&#xff0c;可能数据就在半路给搞丢了&#xff0c;因为网络问题&#xff0c;都有可能。 第二种&#xff1a;RabbitMQ 弄丢了数据。MQ还没有持久化自己挂了。 第三种&#xff1a;消费端…

Attention is All You Need精读

原文开头&#xff0c;不是搬运 dog。All attention is all you need Abstract 摘要 这篇文章的内容源于基于编码器-解码器架构的RNN模型&#xff0c;在其他人的工作中&#xff0c;我们可以发现注意力机制对于提升编码器-解码器架构模型的性能很重要。这篇文章提出了一个比较简…

《代码整洁之道:程序员的职业素养》

作者&#xff1a;【美】Robert C. Martin 第1章 专业主义 专业主义就意味着担当责任&#xff0c;软件开发太复杂了&#xff0c;不可能没什么 bug。但很不幸&#xff0c;这并不能为你开脱。人体太复杂了&#xff0c;不可能尽知其全部&#xff0c;但医生仍要发誓不伤害病人。如…

隐藏excel单元格数据的两个方法

在Excel中&#xff0c;公式是用来计算数据和结果的非常重要的一部分。但是&#xff0c;有时候您可能希望隐藏公式&#xff0c;以保护其不被他人修改或查看。那么今天小编就来给大家分享隐藏excel单元格数据的方法。 一、使用“隐藏”功能 在Excel中&#xff0c;我们还可以使用…

ZYNQ学习--AXI总线协议

一、AXI 总线简介 AXI&#xff08;Advanced Extensible Interface&#xff09;高级拓展总线是AMBA&#xff08;Advanced Microcontroller Bus Architecture&#xff09;高级微控制总线架构中的一个高性能总线协议&#xff0c;由ARM公司开发。AXI总线协议被广泛应用于高带宽、低…

大语言模型超参数调优:开启 AI 潜能的钥匙

前言 在人工智能的广袤领域中&#xff0c;大语言模型&#xff08;LLM&#xff09;凭借其强大的实力&#xff0c;不断重塑着我们对机器理解语言的认知。然而&#xff0c;要使这些模型在特定应用场景中发挥最大效能&#xff0c;关键在于巧妙调整其超参数。本文将引领你深入探究 …

x-cmd pkg | bat: cat 命令现代化替代品,终端用户必备工具

目录 简介快速上手安装使用与第三方工具组合使用 功能特点竞品和相关作品进一步阅读 简介 bat 是由 github.com/sharkdp 用 Rust 开发的 cat 命令现代化替代品。它比 cat 命令扩展了更多的现代化功能&#xff0c;如语法高亮、自动分页、Git集成等&#xff0c;能为用户提供更为…

python如何跨文件调用自己定义的函数

当自己定义函数过多时&#xff0c;只有一个python文件时代码会很长&#xff0c;不易理清代码框架&#xff0c;比如下面这段代码&#xff0c;如何隐藏具体函数细节呢&#xff1f;也就是把def函数放到另外一个python文件里步骤如下&#xff1a; 一个python文件代码篇幅过长 imp…

结构体对齐、函数传参、库移植

结构体字节对齐 按固定位大小匹配地址&#xff0c;a:10b:1020位 <32位4字节 202040位>32位 所以ab20作为一个int型&#xff0c;int c:20 单独做4个字节&#xff08;int&#xff09; 101020 &#xff08;int&#xff09;4个字节 &#xff0c;20&#xff08;int&#x…

算法之逻辑斯蒂回归(Logistic regression)

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;是统计学中一种广泛应用于二分类问题的算法。它的主要目标是预测二分类问题中的事件发生的概率。尽管名字里有“回归”&#xff0c;但逻…

wordpress迁移到别的服务器

wordpress论坛网站搭建 于2023/11/16写的该文章 一-配置环境 配置LNMP&#xff08;linuxnginxmysqlphpphpmyadmin&#xff09;环境或者LAMP&#xff08;apache&#xff09; 可以选择集成了这些软件的套件 下载链接&#xff1a;https://www.xp.cn/download.html 手动下载这…