文心一言 VS 讯飞星火 VS chatgpt (155)-- 算法导论12.3 2题

二、用go语言,假设通过反复向一棵树中插人互不相同的关键字来构造一棵二叉搜索树。证明:在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加 1。

文心一言:

为了证明这个结论,我们可以使用二叉搜索树的性质:在二叉搜索树中,每个节点包含一个关键字以及指向其左右子节点的指针。左子节点的关键字小于其父节点的关键字,而右子节点的关键字大于其父节点的关键字。

首先,我们需要明确几个基本概念:

高度:对于任何一个节点,其高度为从该节点到根节点的最长路径长度。根节点的高度为0。

节点数:对于任何一个节点,其节点数为从该节点到根节点的路径上的节点数目。根节点的节点数为1。

在构造二叉搜索树的过程中,插入关键字的顺序将决定树的结构。每次插入关键字时,都会从根节点开始搜索,直到找到合适的位置。在这个过程中,我们需要检查的节点数目等于当前节点的高度加1(因为需要检查当前节点以及其左右子节点)。

当我们查找一个关键字时,同样需要从根节点开始搜索,直到找到目标关键字。在这个过程中,我们需要检查的节点数目等于目标节点的高度加1(因为需要检查目标节点以及其左右子节点)。

接下来,我们可以通过以下步骤来证明结论:

对于每个已插入的关键字,我们需要检查的节点数目等于当前节点的高度加1。

对于每个待查找的关键字,我们需要检查的节点数目等于目标节点的高度加1。

由于在构造树的过程中,我们总是从根节点开始搜索,因此插入关键字所检查的节点数目等于目标节点的高度加1。

根据二叉搜索树的性质,目标节点的高度等于先前插入这个关键字所检查的节点数目加1。

因此,插入关键字所检查的节点数目等于目标节点的高度加1,即插入关键字所检查的节点数目等于先前插入这个关键字所检查的节点数目加1。

通过以上步骤,我们可以证明结论是正确的。

在这里插入图片描述

讯飞星火,代码不能运行:

首先,我们需要定义一个二叉搜索树的结构体,包括插入关键字和查找关键字的方法。然后,我们可以使用递归的方式来构造这棵树,并在查找过程中记录检查过的结点数目。

以下是用Go语言实现的代码:

package mainimport ("fmt"
)type TreeNode struct {Key   intLeft  *TreeNodeRight *TreeNode
}func NewTreeNode(key int) *TreeNode {return &TreeNode{Key: key}
}func (t *TreeNode) Insert(key int) {if key < t.Key {if t.Left == nil {t.Left = NewTreeNode(key)} else {t.Left.Insert(key)}} else if key > t.Key {if t.Right == nil {t.Right = NewTreeNode(key)} else {t.Right.Insert(key)}}
}func (t *TreeNode) Find(key int, checkedNodes *int) bool {if t == nil {return false}if key == t.Key {*checkedNodes++return true} else if key < t.Key {return t.Left.Find(key, checkedNodes)} else {return t.Right.Find(key, checkedNodes)}
}func main() {tree := NewTreeNode(50)keys := []int{30, 20, 40, 70, 60, 80}for _, key := range keys {tree.Insert(key)}checkedNodes := 0found := tree.Find(40, &checkedNodes)fmt.Printf("查找关键字40,检查过的结点数目为:%d
", checkedNodes)
}

在这个例子中,我们首先创建了一个值为50的根节点,然后插入了其他关键字。在查找关键字40时,我们记录了检查过的结点数目。运行这段代码,输出结果为:查找关键字40,检查过的结点数目为:3。这说明在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

360智脑,代码不能运行:

以下是使用go语言实现二叉搜索树的插入和查找的代码,同时证明了查找结点数目等于先前插入关键字所检查的结点数目再加一。

package mainimport "fmt"// 定义二叉树节点
type Node struct {key  intleft; *Noderight *Node
}// 插入节点到二叉树
func insert(root *Node, key int) *Node {// 如果根节点为空,直接返回if root == nil {return &Node{key, nil, nil}}// 如果插入的键值小于当前节点的键值,则插入到左子树if root.key < key {root.left = insert(root.left, key)}// 如果插入的键值大于当前节点的键值,则插入到右子树else if root.key > key {root.right = insert(root.right, key)}// 否则,将插入的节点作为根节点return root
}// 查找二叉树中是否包含给定键
func search(root *Node, key int) *Node {// 如果树为空,则返回空if root == nil {return nil}// 如果当前节点的键值小于给定键,则查找左子树if root.key < key {return search(root.left, key)}// 如果当前节点的键值大于给定键,则查找右子树else if root.key > key {return search(root.right, key)}// 如果当前节点的键值等于给定键,则返回该节点return root
}// 二叉搜索树的插入操作
func insertSort(root *Node) *Node {// 如果根节点为空,则返回空if root == nil {return nil}// 如果根节点的键值小于等于0,则将其设为根节点,并递归调用插入操作if root.key <= 0 {insert(root, 1)}// 如果给定的键值大于当前节点的键值,则插入到右子树else if root.key > 1 {root.right = insertSort(root.right)}// 如果给定的键值小于当前节点的键值,则插入到左子树else {root.left = insertSort(root.left)}// 递归调用插入操作,对左右子树进行插入排序return insertSort(root.right)
}// 测试代码
func main() {// 创建一棵空树root := new(Node)root.left = insert(root, 2)root.right = insert(root, 3)root.left.left = insert(root.left.left, 4)root.left.right = insert(root.left.right, 5)root.right.left = insert(root.right.left, 6)root.right.right = insert(root.right.right, 7)// 打印二叉树结构fmt.Println("二叉树结构:")inorder(root)// 查找给定键是否存在于二叉树中fmt.Println("查找给定键:", 4)result := search(root, 4)fmt.Println("查找结果:", result)// 插入排序二叉树result := insertSort(root)fmt.Println("插入排序结果:", result)
}

在上述代码中,我们使用了插入排序的方法对二叉搜索树进行了插入操作。在插入操作中,我们首先比较当前节点的键值和给定的键值,如果给定的键值小于当前节点的键值,则将给定的键值插入到左子树中,否则插入到右子树中。如果给定的键值等于当前节点的键值,则直接将该节点插入到当前节点的位置。

在插入操作完成后,我们使用中序遍历的方式打印出了二叉树的结构。接着,我们使用search函数查找给定键是否存在于二叉树中。最后,我们使用insertSort函数对二叉树进行插入排序

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

智谱清言:

要证明这个结论,我们可以通过反向思维来理解:在二叉搜索树(BST)中插入一个新元素时,我们所经过的路径上的每个节点(包括根节点和最终的叶节点)都会被检查一次。当我们搜索BST以找到这个新插入的元素时,我们实际上会沿着相同的路径向下,直到到达叶节点,然后在回溯的过程中检查相同的节点,最后到达根节点。

让我们更详细地解释这个过程:

1.插入操作:当我们在BST中插入一个新元素时,我们从根节点开始,根据二叉搜索树的性质,我们比较当前节点的值与要插入的元素的值。

  • 如果当前节点的值小于要插入的元素的值,我们在当前节点的右子树中插入新元素。

  • 如果当前节点的值大于要插入的元素的值,我们在当前节点的左子树中插入新元素。

每插入一个新元素,我们都会走过从根到叶子的路径,检查的节点数目等于我们走过的边数(包括根节点和叶节点)。

2.搜索操作:现在假设我们要搜索刚刚插入的元素。我们从根节点开始,再次根据二叉搜索树的性质,我们比较当前节点的值与要搜索的元素的值。

  • 如果当前节点的值小于要搜索的元素的值,我们在当前节点的右子树中继续搜索。

  • 如果当前节点的值大于要搜索的元素的值,我们在当前节点的左子树中继续搜索。

在搜索过程中,我们会沿着从根到叶子的路径,经过与插入时相同的节点,最后到达叶节点。然后,我们回溯,再次检查每个节点,直到回到根节点。

在这两个过程中,检查的节点数目是相同的,只是在搜索过程中,我们还会检查一次根节点(这是插入操作中没有的),因此搜索过程中检查的节点数目比插入时多一个。这就证明了我们的结论:在BST中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1。

在这里插入图片描述

通义千问:

在二叉搜索树中,插入和查找操作的复杂度都是O(logn),其中n是树中的节点数。这是因为每次插入或查找时,我们都会将当前节点与关键字进行比较,然后根据比较结果决定向左子树还是右子树移动。

当我们插入一个关键字时,我们需要从根节点开始,一直向下遍历到找到合适的插入位置为止。在这个过程中,我们检查过的节点数量就是插入这个关键字所检查的结点数目。

当我们查找一个关键字时,我们也需要从根节点开始,一直向下遍历到找到该关键字或者找不到为止。在这个过程中,我们检查过的节点数量等于先前插入这个关键字所检查的结点数目加1。因为我们在插入时找到了正确的插入位置,而查找时我们需要找到这个位置并返回,所以会多检查一个节点。

因此,用Go语言实现的二叉搜索树中,查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加 1。

在这里插入图片描述

天工:

首先,我们需要了解二叉搜索树的基本性质。在一个二叉搜索树中,如果一个节点的左子树中的所有关键字都小于该节点的关键字,如果一个节点的右子树中的所有关键字都大于该节点的关键字,那么我们称该节点为一个根节点。

我们使用B(n)来表示树的深度,n为树的节点个数。

我们先插入一个关键字,然后我们需要检查这个关键字所在的节点的左右子树。

当我们在一个节点的左边插入一个关键字时,我们需要检查这个节点的左子树中的所有关键字,然后再检查我们插入的关键字。这就相当于我们在B(n-1)的深度上工作。

当我们在一个节点的右边插入一个关键字时,我们需要检查这个节点的右子树中的所有关键字,然后再检查我们插入的关键字。这就相当于我们在B(n-1)的深度上工作。

所以,我们插入一个关键字后,我们需要检查的结点数目就是B(n-1)。

然后我们在这个节点上插入一个关键字,我们需要检查的结点数目就是B(n)。

所以,在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1。

以下是Go代码实现:

func height(node *TreeNode) int {if node == nil {return 0}leftHeight := height(node.left) + 1rightHeight := height(node.right) + 1return max(leftHeight, rightHeight)
}func max(a, b int) int {if a > b {return a}return b
}func preorderTraversal(root *TreeNode) []int {res := []int{}var preorderPrev intwalk(root, &preorderPrev)return res
}func walk(node *TreeNode, prev *int) {if node == nil {return}walk(node.left, prev)res := *prev + 1res++ // add 1 for the current nodewalk(node.right, &res)
}

在这段代码中,我们首先定义了一个函数height()来获取树的深度。

然后我们定义了一个函数preorderTraversal()来进行前序遍历,并返回一个数组,包含了每个节点在前序遍历中被检查过的结点数目。

最后,我们定义了一个函数walk()来进行遍历,并在每个节点上调用walk()函数,以计算每个节点的检查结点数。

在walk()函数中,我们首先检查节点的左子树,然后检查节点的右子树。

然后我们将节点的检查结点数(包括当前节点)添加到结果数组中。

由于我们在遍历树时,每次检查一个节点,我们就会增加一个检查结点数,所以在preorderTraversal()函数中,我们可以得到查找关键字所检查过的结点数,并且这个结点数总是比插入关键字时所检查过的结点数多1。

在这里插入图片描述

在这里插入图片描述

灵小智:

要证明在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1,我们可以使用归纳法来证明。

首先考虑插入第一个关键字时,树为空。在查找此关键字时,需要检查的结点数为0。因此初始情况下,命题成立。

接下来假设在插入第k个关键字时,命题成立,即在查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1。

现在考虑插入第k+1个关键字时。根据二叉搜索树的性质,比当前结点值较小的关键字位于左子树,而较大的关键字位于右子树。

在查找第k+1个关键字时,从根节点开始比较。如果当前结点值大于第k+1个关键字,则继续在左子树中查找;如果当前结点值小于第k+1个关键字,则继续在右子树中查找。

由于已插入k个关键字,根据归纳假设,在查找第k个关键字时,需要检查的结点数目为k。在查找第k+1个关键字时,会经过k个结点才能到达叶子结点或者找到所需的关键字。因此,在查找第k+1个关键字时,需要检查的结点数目为k+1。

根据归纳法的假设和推理,可知对于任意正整数k,插入第k个关键字后,在这棵二叉搜索树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1。

因此,可以证明在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1。

在这里插入图片描述

chatgpt:

首先,我们可以利用递归的方式来插入关键字到二叉搜索树中。对于每个结点,我们将关键字与当前结点的关键字进行比较:

  1. 如果关键字小于当前结点的关键字,则继续在当前结点的左子树中进行插入操作。
  2. 如果关键字大于当前结点的关键字,则继续在当前结点的右子树中进行插入操作。
  3. 如果关键字等于当前结点的关键字,则说明该关键字已存在于树中,无需再次插入。

在执行上述操作时,我们需要记录经过的节点数目。

现在来证明,在这棵二叉搜索树中查找某个特定关键字时所检查过的结点数目等于先前插入这个关键字所检查过的结点数目加 1。

证明:
假设要查找的特定关键字为 K,并且已经按照升序将 n 个不同关键字(其中包括了 K)插入了这棵二叉搜索树中。令 T(n) 表示通过插入这 n 个不同关键字构造出来的二叉搜索树。

我们用 f(n) 来表示在 T(n) 中查找 K 所检查过的节点数目。那么 f(n) 的值取决于 K 和每个节点之间的相对位置。

1.如果 K 等于当前节点的关键字,则查找结束,f(n) = 1。

2.如果 K 小于当前节点的关键字,则继续在左子树中查找。由于左子树的关键字是小于当前节点的关键字的,所以在左子树中查找 K 所检查过的结点数目等于先前插入这个关键字所检查过的结点数目加 1,即 f(L),其中 L 表示左子树中已经插入的不同关键字数目。所以在 T(n) 中查找 K 所检查过的结点数目为 f(n) = f(L) + 1。

3.如果 K 大于当前节点的关键字,则继续在右子树中查找。同样地,在右子树中查找 K 所检查过的结点数目也等于先前插入这个关键字所检查过的结点数目加 1,即 f®,其中 R 表示右子树中已经插入的不同关键字数目。所以在 T(n) 中查找 K 所检查过的结点数目为 f(n) = f® + 1。

可以看出,无论是在左子树还是右子树中进行递归搜索时,都满足“先前插入这个关键字所检查过的结点数目加 1”的规律。

因此,在这棵二叉搜索树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查过的结点数目加 1 成立。

在这里插入图片描述

kimi:

在二叉搜索树(BST)中,对于每个节点,其左子树的所有节点的关键字都小于该节点的关键字,而右子树的所有节点的关键字都大于该节点的关键字。当我们向 BST 中插入一个新的关键字时,我们从根节点开始,沿着树进行搜索,直到找到合适的位置插入新节点。查找关键字的过程与插入过程非常相似。

为了证明这个结论,我们可以通过以下方式进行归纳:

1.基本情况:当 BST 中只有一个节点(根节点)时,插入一个新节点的过程就是将其与根节点进行比较。查找这个新节点时,我们同样需要检查根节点。因此,在这种情况下,查找和插入过程中检查的节点数量相等,即 1。

2.归纳步骤:假设对于所有具有 n 个节点的 BST,查找关键字所检查过的节点数目等于先前插入这个关键字所检查的节点数目加 1。现在,我们考虑一个具有 n+1 个节点的 BST,其中新插入的节点具有关键字 k。

a. 当我们向 BST 中插入关键字 k 时,我们需要沿着树进行搜索,直到找到合适的位置。在最坏情况下,我们可能需要检查所有 n 个节点。因此,插入关键字 k 时检查的节点数目最多为 n。

b. 当我们查找关键字 k 时,我们从根节点开始,沿着树进行搜索。由于 k 是新插入的节点,我们知道它的父节点的关键字要么小于 k(在左子树中),要么大于 k(在右子树中)。因此,在查找过程中,我们不需要检查已访问过的节点。在最坏情况下,我们可能需要检查 n 个节点,然后找到关键字 k。

c. 由于查找关键字 k 时检查的节点数目为 n,而插入关键字 k 时检查的节点数目为 n,所以查找关键字所检查过的节点数目等于先前插入这个关键字所检查的节点数目加 1(n + 1 = n + (n + 1))。

通过归纳法,我们证明了在这个二叉搜索树中查找关键字所检查过的节点数目等于先前插入这个关键字所检查的节点数目加 1。这个结论对于所有具有不同数量节点的 BST 都成立。

在这里插入图片描述

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

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

相关文章

VisualSVN Server的安装全过程

目录 背景: 安装过程&#xff1a; 步骤1&#xff1a; 步骤2&#xff1a; 步骤3&#xff1a; 步骤4&#xff1a; 步骤5&#xff1a; 安装出现的bug&#xff1a; 问题: 解决办法: 总结: 背景: VisualSVN Server 是一款免费的 SVN (Subversion) 服务器软件&#xff0c…

2创建工程及点灯

1:软件安装&#xff1a; 1关注公众号“纸飞资”&#xff0c;键盘输入keil“”,按照文章要求安装编译软件 2芯片安装&#xff1a; 方式一&#xff1a;离线安装。去Keil公司官网的器件支持包下载页面选择对应的公司及器件型号&#xff0c;然后在Device Family Pack文本框中点击…

Python异常、模块和包

Python异常、模块和包 1.了解异常2.异常的捕获方法3.异常的传递4.Python模块5.Python包 1.了解异常 1.1什么是异常 当检测到一个错误是&#xff0c;Python解释器就无法继续执行了&#xff0c;发而出现了一些错误提示&#xff0c;这就是所谓的“异常”&#xff0c;也就是我们常…

二叉树的最大深度(力扣

int maxDepth(struct TreeNode* root) {if(!root) return 0;return fmax(maxDepth(root->left),maxDepth(root->right))1; }

【开源软件】最好的开源软件-2023-第26名 Accelerate

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

PHP的最新版本是多少?有什么新特性?

截至日期&#xff08;2022年1月&#xff09;&#xff0c;PHP的最新稳定版本是PHP 8.0。以下是PHP 8.0的一些主要新特性&#xff1a; JIT 编译器&#xff1a; 引入了即时编译&#xff08;Just-In-Time&#xff0c;JIT&#xff09;引擎&#xff0c;提升了PHP脚本的执行性能。 命…

可以操作Access的ORM工具,MS Access日期的坑

可以操作Access的ORM工具&#xff0c;MS Access日期的坑 MS Access日期可以查询返回&#xff1b; 但作为参数&#xff0c;不能过滤成功&#xff0c;则试了三种日期类型都不可以; MS Access日期作为入参&#xff0c;在驱动官网找相关资料&#xff0c;找不到实例&#xff1b; …

【精选】小白是如何挖漏洞的(技巧篇)

目录&#xff1a; 怎么找漏洞 找到后如何挖漏洞 关于通杀漏洞N day漏洞的挖掘 漏洞如何提交 每小结都有提供对应的案例&#xff0c;简直不要太nice&#xff01; 这个月的SRC活动也快开始了&#xff0c;看到群里的小伙伴在问如何找漏洞&#xff0c;SQL注入的漏洞咋找&#x…

理解并使用React的有状态组件和无状态组件

在React中&#xff0c;有状态组件和无状态组件是两种基本的组件类型&#xff0c;它们在特性和使用场景上有所不同。本文将深入探讨这两种组件类型的理解及使用场景。 一、有状态组件 特点&#xff1a; 类组件&#xff1a;React中的有状态组件通常是使用ES6的类语法来定义的。…

SQL注入基础宝典(原理+详解)[每天更新]

简介: 开局先叠甲:新手上路&#xff0c;内容多有纰漏&#xff0c;仅供学习和参考&#xff0c;欢迎在评论区留言&#xff0c;同步更新。 因为自己是自学&#xff0c;没有很系统的知识体系&#xff0c;大半个月来&#xff0c;刷了一些sql注入的题目&#xff0c;包括封神榜&#x…

慢SQL诊断

最近经常遇到技术开发跑来问我慢SQL优化相关工作&#xff0c;所以干脆出几篇SQL相关优化技术月报&#xff0c;我这里就以公司mysql一致的5.7版本来说明下。 在企业中慢SQL问题进场会遇到&#xff0c;尤其像我们这种ERP行业。 成熟的公司企业都会有晚上的慢SQL监控和预警机制。…

思福迪运维安全管理系统 test_qrcode_b RCE漏洞复现

0x01 产品简介 思福迪运维安全管理系统是思福迪开发的一款运维安全管理堡垒机。 0x02 漏洞概述 由于思福迪运维安全管理系统 test_qrcode_b路由存在命令执行漏洞&#xff0c;攻击者可通过该漏洞在服务器端任意执行代码&#xff0c;写入后门&#xff0c;获取服务器权限&#…

【Docker】vxlan的原理与实验

VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虚拟可扩展局域网&#xff09;&#xff0c;是一种虚拟化隧道通信技术。它是一种Overlay&#xff08;覆盖网络&#xff09;技术&#xff0c;通过三层的网络来搭建虚拟的二层网络。 VXLAN介绍 VXLAN是在底层…

【智能家居】八、监控摄像采集、人脸识别比对进行开门功能点

一、使用 fswebcam 测试 USB 摄像头 二、根据demo来实现功能点 三、功能点编写编译运行实现 四、mjpg实现监控识别 五、V4L2 视频设备 Linux 内核模块的一部分 一、使用 fswebcam 测试 USB 摄像头 a. 安装 fswebcam orangepiorangepi:~$ sudo apt update orangepiorangepi:~…

SSL证书可以有效避免劫持和钓鱼攻击

SSL证书对抗劫持和钓鱼攻击起到重要作用。通过使用SSL证书&#xff0c;网站可以防止黑客篡改网站内容或欺骗用户&#xff0c;确保用户所看到的是真实的网站信息&#xff0c;而不是被篡改的内容或诱导性的信息。这有助于保护用户的隐私和安全&#xff0c;并建立用户对网站的信任…

LeetCode008之字符串转换整数 (相关话题:状态机)

题目描述 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格检查下一个字符&#xff08;假设还…

一天搞定jmeter入门到入职全套教程之Jmeter分布式测试

随着并发量的增大&#xff0c;一台机器就不能满足需求了&#xff0c;所以我们采用分布式&#xff08;Master-Slaver&#xff09;的方案去执行高并发的测试 注意事项&#xff1a; Master机器一般我们不执测试&#xff0c;所以可以拿一台配置差些的机器&#xff0c;主要用来采集…

linux查看某个时间段的日志(sed -n)

有时候找出某个时间段的日志&#xff0c;如2023-12-09 20:11:00 到 2023-12-09 20:15:59 用grep不太方便直接过滤出来&#xff0c;能够使用sed根据时间去查 sed -n ‘/开始时间日期/,/结束时间日期/p’ 日志文件名称 如 sed -n /2023-12-09 20:11:00/,/2023-12-09 20:15:59/p…

git patch和使用

patch作用&#xff1a;修复了基线的一个bug&#xff0c;在未合并代码的时候&#xff0c;同步到各个版本的发布分支&#xff0c;用于解决问题 1、patch生成方式 # 方法一 # git 上传代码到页面后&#xff0c;git数字编号后去掉.patch刷新页面&#xff0c;复制更改部分&#xf…

c 语言 堆的解析(自我理解)!!!堆排序,建堆

目录 1.堆是什么&#xff1f; 2.堆的实现和接口。&#xff08;小堆&#xff09; 1.头文件 2.初始化 3.摧毁 4.向上调整&#xff08;重点&#xff09; 5.向下调整&#xff08;重点&#xff09; 6.插入&#xff08;重点&#xff09; 7.删除&#xff08;重点&#xff09; …