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

一、用go语言,给出 TREE-INSERT 过程的一个递归版本。

文心一言,代码不能运行:

下面是用 Go 语言实现一个递归版本的 TREE-INSERT 过程的代码:

package main  import "fmt"  type TreeNode struct {  Val   int  Left  *TreeNode  Right *TreeNode  
}  func insert(root *TreeNode, val int) *TreeNode {  if root == nil {  return &TreeNode{Val: val, Left: nil, Right: nil}  }  if val < root.Val {  root.Left = insert(root.Left, val)  } else if val > root.Val {  root.Right = insert(root.Right, val)  }  return root  
}  func inorderTraversal(root *TreeNode) {  if root != nil {  inorderTraversal(root.Left)  fmt.Println(root.Val)  inorderTraversal(root.Right)  }  
}  func main() {  root := nil  root = insert(root, 5)  insert(root, 3)  insert(root, 7)  insert(root, 1)  insert(root, 9)  inorderTraversal(root)  
}

在这个代码中,我们定义了一个 TreeNode 结构体来表示二叉树节点。insert 函数用于将一个值插入到二叉搜索树中,它采用递归的方式实现。如果当前节点为空,则创建一个新的节点作为根节点;否则,根据值的大小,递归地插入到左子树或右子树中。最后返回根节点。我们还定义了一个 inorderTraversal 函数来验证树的正确性,它会按照中序遍历的顺序打印出节点的值。在 main 函数中,我们创建了一个二叉搜索树,并插入了一些值。然后调用 inorderTraversal 函数来验证结果。

在这里插入图片描述

在这里插入图片描述

讯飞星火,代码正常运行:

package mainimport ("fmt"
)type TreeNode struct {Value       intLeft, Right *TreeNode
}func TreeInsert(root *TreeNode, value int) *TreeNode {if root == nil {return &TreeNode{Value: value}}if value < root.Value {root.Left = TreeInsert(root.Left, value)} else if value > root.Value {root.Right = TreeInsert(root.Right, value)}return root
}func main() {root := &TreeNode{Value: 50}root = TreeInsert(root, 30)root = TreeInsert(root, 70)root = TreeInsert(root, 20)root = TreeInsert(root, 40)root = TreeInsert(root, 60)root = TreeInsert(root, 80)fmt.Println("树的结构:")printInOrder(root)
}func printInOrder(node *TreeNode) {if node != nil {printInOrder(node.Left)fmt.Printf("%d ", node.Value)printInOrder(node.Right)}
}

在这里插入图片描述

在这里插入图片描述

360智脑:

以下是一个递归版本的 TREE-INSERT 过程:

package mainimport (
<t>"fmt"
)//定义树
type BinaryTree struct {
<t>value int
<t>left, right *BinaryTree
}//新树
func NewBinaryTree(rootVal int) *BinaryTree {
<t>return &BinaryTree{value: rootVal, left: nil, right: nil}
}//插入树
func (bst *BinaryTree) Insert(val int) {
<t>if bst == nil || val < bst.value {
<t><t>bst.left = NewBinaryTree(val)
<t>} else if val > bst.value {
<t><t>bst.right = NewBinaryTree(val)
<t>} else {
<t><t>fmt.Println("错误:值必须在树中")
<t><t>return
<t>}
<t>bst.value = val
}func main() {
<t>//定义切片存放树的元素
<t>array := []int{6, 3, 8, 2, 5, 1, 7}
<t>var bst *BinaryTree
<t>for _, v := range array {
<t><t>bst = bst.Insert(v)
<t>}<t>fmt.Println("插入后的树:")
<t>bst.PreOrder()
<t>fmt.Println()
<t>bst.InOrder()
<t>fmt.Println()
<t>bst.PostOrder()
}

在这里插入图片描述

在这里插入图片描述

智谱清言,代码不能运行:

在计算机科学中,二叉搜索树(BST)是一种特殊的二叉树,它具有以下性质:

  • 每个节点都有一个作为关键字的值,该值唯一存在于树中。

  • 左子树上所有节点的值均小于它的根节点的值。

  • 右子树上所有节点的值均大于它的根节点的值。

TREE-INSERT 过程是在 BST 中插入一个新值的过程。这里给出一个用 Go 语言编写的递归版本的 TREE-INSERT 过程:

package main
import ("fmt"
)
type TreeNode struct {Value intLeft  *TreeNodeRight *TreeNode
}
// TREE-INSERT 过程的递归版本
func treeInsert(t *TreeNode, key int) *TreeNode {// 如果当前节点是nil(即到达了树的末端),则创建一个新节点if t == nil {return &TreeNode{Value: key}}// 如果新键值小于当前节点的键值,则在左子树中递归插入if key < t.Value {t.Left = treeInsert(t.Left, key)} else if key > t.Value { // 如果新键值大于当前节点的键值,则在右子树中递归插入t.Right = treeInsert(t.Right, key)}// 返回当前节点(可能已经更新)return t
}
func main() {// 创建一个空的二叉搜索树root := nil// 向树中插入一些键值root = treeInsert(root, 5)root = treeInsert(root, 3)root = treeInsert(root, 8)root = treeInsert(root, 1)root = treeInsert(root, 4)root = treeInsert(root, 6)root = treeInsert(root, 9)root = treeInsert(root, 2)root = treeInsert(root, 7)// 以 inorder 遍历的方式打印树,验证是否正确插入var inorder func(t *TreeNode)inorder = func(t *TreeNode) {if t == nil {return}inorder(t.Left)fmt.Println(t.Value)inorder(t.Right)}// 开始 inorder 遍历inorder(root)
}

在这个代码中,treeInsert 函数以递归方式向 BST 中插入一个新值。如果当前节点是 nil,它将返回一个新节点。如果新值小于当前节点的值,它将在左子树中递归插入,如果新值大于当前节点的值,它将在右子树中递归插入。main 函数中展示了如何使用 treeInsert 函数,并通过 inorder 遍历打印出树的键值,以验证插入是否正确。

在这里插入图片描述

在这里插入图片描述

通义千问,代码正常运行:

在 Go 语言中,你可以使用递归来实现 TREE-INSERT 过程。这里是一个简单的示例,假设你有一个名为 Tree 的结构体表示二叉搜索树(BST)的节点,并且该结构体包含一个指向左子节点和右子节点的指针以及一个值。

package mainimport "fmt"type Tree struct {value intleft  *Treeright *Tree
}// Recursive TREE_INSERT function
func treeInsert(root **Tree, z *Tree) {if *root == nil {*root = zreturn}// Compare the new node's value with the current root's valueif (*root).value > z.value {// If the new node's value is smaller, insert into the left subtreetreeInsert(&(*root).left, z)} else {// If the new node's value is larger or equal, insert into the right subtreetreeInsert(&(*root).right, z)}
}func main() {var root *Treez := &Tree{value: 10}treeInsert(&root, z)y := &Tree{value: 5}treeInsert(&root, y)x := &Tree{value: 15}treeInsert(&root, x)fmt.Println("In-order traversal:")inorderTraversal(root)
}// Helper function to print in-order traversal of a binary search tree
func inorderTraversal(t *Tree) {if t != nil {inorderTraversal(t.left)fmt.Printf("%d ", t.value)inorderTraversal(t.right)}
}

在这个例子中,我们首先定义了一个 Tree 结构体来表示二叉搜索树的节点。接下来,我们实现了 treeInsert 函数,它接受一个指向树根的指针和一个新的节点 z。函数通过比较新节点的值与当前根节点的值来决定将新节点插入到左子树还是右子树。如果当前根为空,那么新节点就成为新的根节点。

main 函数中,我们创建了一个空的根节点,并使用 treeInsert 函数插入了几个新节点。最后,我们调用了一个辅助函数 inorderTraversal 来打印出二叉搜索树的中序遍历结果。

请注意,这个示例仅用于演示如何使用递归实现 TREE-INSERT 过程。在实际应用中,你需要根据你的具体需求对代码进行调整。

在这里插入图片描述

在这里插入图片描述

天工:

好的,以下是一个使用 Go 语言实现的 TREE-INSERT 过程的递归版本:

func TREE_INSERT(root *Node, z *Node) *Node {// 如果根节点为空,则创建一个新节点作为根节点if root == nil {root = &Node{key: z.key, val: z.val}return root}// 如果根节点的键小于 z 的键if root.key < z.key {// 将 z 插入到根节点的左子树中root.left = TREE_INSERT(root.left, z)return root}// 如果根节点的键等于 z 的键root.right = TREE_INSERT(root.right, z)// 返回根节点return root
}

其中,Node 结构体定义如下:

type Node struct {key intval intleft *Noderight *Node
}

该递归版本的实现思路与参考信息中的伪代码基本一致。当递归到叶子节点时,返回的根节点即为最后一个插入的元素。

在这里插入图片描述

在这里插入图片描述

灵小智,代码正常运行:

以下是一个用Go语言编写的递归版本的TREE-INSERT过程示例:
package mainimport "fmt"type Node struct {key   intleft  *Noderight *Node
}func insert(root *Node, key int) *Node {if root == nil {root = &Node{key: key, left: nil, right: nil}return root}if key < root.key {root.left = insert(root.left, key)} else if key > root.key {root.right = insert(root.right, key)}return root
}func inorder(root *Node) {if root != nil {inorder(root.left)fmt.Printf("%d ", root.key)inorder(root.right)}
}func main() {var root *Nodekeys := []int{15, 10, 20, 8, 12, 18, 25}for _, key := range keys {root = insert(root, key)}fmt.Println("Inorder traversal of the binary search tree:")inorder(root)
}

以上代码定义了一个名为Node的结构体,表示二叉搜索树中的节点。insert函数是一个递归函数,用于插入一个新的键值到二叉搜索树中。inorder函数用于按照中序遍历的顺序输出二叉搜索树中的节点。

main函数中,我们创建一个空的二叉搜索树,并依次插入一些键值。最后,调用inorder函数打印二叉搜索树的中序遍历结果。

请注意,这只是一个示例,并没有涉及错误处理和其他边界情况的处理。实际使用时,您可能需要进行适当的错误处理和鲁棒性改进。

在这里插入图片描述

在这里插入图片描述

chatgpt:

以下是一个使用递归实现的TREE-INSERT过程的示例代码(假设节点数据类型为整数):

type Node struct {key   intleft  *Noderight *Node
}func insert(root *Node, key int) *Node {if root == nil {return &Node{key: key}}if key < root.key {root.left = insert(root.left, key)} else if key > root.key {root.right = insert(root.right, key)}return root
}

你可以将上述代码中的insert函数作为TREE-INSERT过程的递归版本。它会接收一个二叉搜索树的根节点和要插入的关键字作为参数,然后在树中递归地插入新节点,最终返回更新后的根节点。

在这里插入图片描述

kimi,抛panic:

在 Go 语言中,我们可以实现一个递归版本的 TREE-INSERT 过程。以下是一个简单的实现:

package maintype Node struct {key   interface{} // 可以是任何可比较的数据类型,如 int、string 等left  *Noderight *Node
}func (n *Node) TreeInsert(key interface{}) *Node {if n == nil {return &Node{key: key}}if key.(int) < n.key.(int) {n.left = n.left.TreeInsert(key)} else {n.right = n.right.TreeInsert(key)}return n
}func main() {root := &Node{}keys := []int{8, 3, 10, 1, 6, 14, 4, 7, 13}for _, key := range keys {root = root.TreeInsert(key)}// 中序遍历(左子树 -> 当前节点 -> 右子树),输出二叉搜索树的元素inOrderTraversal(root)
}func inOrderTraversal(n *Node) {if n != nil {inOrderTraversal(n.left)fmt.Println(n.key)inOrderTraversal(n.right)}
}

在这个实现中,我们首先定义了一个 Node 结构体,表示二叉搜索树的节点。TreeInsert 方法是一个递归方法,它接受一个关键字作为参数。当树为空时,我们创建一个新的节点。然后,我们根据给定的关键字与当前节点的关键字的大小关系,将其插入到左子树或右子树中。

main 函数中,我们创建了一个空的根节点,并插入了一些整数。然后,我们使用 inOrderTraversal 函数按顺序遍历二叉搜索树并输出其元素。这个函数也是一个递归函数,它按照左子树 -> 当前节点 -> 右子树的顺序遍历树的节点。

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

JUC并发编程03——LockSupport与线程中断

一.线程中断机制 假设从网络下载一个100M的文件&#xff0c;如果网速很慢&#xff0c;用户等得不耐烦&#xff0c;就可能在下载过程中点“取消”&#xff0c;这时&#xff0c;程序就需要中断下载线程的执行。 1.1如何停止中断运行中的线程&#xff1f; 通过一个volatile变量…

Android--Jetpack--Databinding源码解析

慢品人间烟火色&#xff0c;闲观万事岁月长 一&#xff0c;基本使用 关于databinding的基本使用请看之前的文章 Android--Jetpack--Databinding详解-CSDN博客 二&#xff0c;xml布局解析 分析源码呢&#xff0c;主要就是从两方面入手&#xff0c;一个是使用&#xff0c;一个…

D28|买卖股票的最佳时机+跳跃游戏

122.买卖股票的最佳时机 II 初始思路&#xff1a; 这道题解题的时候比较像在找规律&#xff0c;发现只要计算这个过程中的两数之差然后相加即可。 题解复盘&#xff1a; 可以更加清晰的发现如何从题意中获得贪心的思路。 如何贪心&#xff1a;局部最优&#xff1a;收集每天的…

mybatis多表映射-延迟加载,延迟加载的前提条件是:分步查询

1、建库建表 create database mybatis-example; use mybatis-example; create table t_book (bid varchar(20) primary key,bname varchar(20),stuid varchar(20) ); insert into t_book values(b001,Java,s001); insert into t_book values(b002,Python,s002); insert into …

2024美赛备战2--模型建立(*****必看****)

建模 美赛涉及的建模知识范围非常广且深&#xff0c;纵观美赛真题不难发现&#xff0c;很多的模型 都是读研或者读博的时候才会真正深入开始研究&#xff0c;因此&#xff0c;对于做建模的同学来说&#xff0c; 是无法在赛前吃透大量模型的。推荐本科生分两个步骤去有效准备比赛…

SpringBootWeb请求响应之前言及状态码的详细解析

SpringBootWeb请求响应 前言 在上一次的课程中&#xff0c;我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用&#xff0c;浏览器发起请求 /hello 后 &#xff0c;给浏览器返回字符串 “Hello World ~”。 其实呢&#xff0c;是我们在浏览器发起请求…

外包干了3个月,技术退步明显。。。

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

搜集怎么绘制三维曲线和曲面?

1、针对函数对象是单一变量、两个函数的情况。用plot3函数&#xff1b;&#xff08;三维曲线&#xff09; 看一下matlab官方的例子&#xff1a; t 0:pi/50:10*pi; st sin(t); ct cos(t); plot3(st,ct,t) 绘制出来的曲线&#xff1a; 几个比较关键的点&#xff1a; &…

NV040D语音芯片应用于取暖桌:智能语音提高用户体验

科技与生活的结合&#xff0c;是科技发展的展示。天气的降温&#xff0c;取暖桌越来越取得用户的心&#xff0c;时至今日传统的取暖桌已经没有办法满足用户的需求&#xff0c;智能语音取暖桌给用户的生活带来了不一样的体验。 NV040D语音芯片是一款性能稳定的芯片&#xff0c;拥…

客户案例:EDLP在央国企邮件数据合规中的价值与优势

客户背景 某机械制造企业&#xff0c;作为动力设备领域的领军企业&#xff0c;专门从事动力设备的研发、制造与销售。凭借丰富的经验与卓越的技术实力&#xff0c;该企业致力于深度研究动力设备的核心技术&#xff0c;为客户提供高效且可靠的解决方案。 客户需求 作为企业健康…

什么是特征图?

在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;特征图是在传递给卷积层的图像上发生卷积操作后卷积层的输出。 特征图是如何形成的&#xff1f; 在上面的插图中&#xff0c;我们可以看到特征图是如何从提供的输入图像中形成的。 要发送到卷积层的图像是一个包含像…

.NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(测试篇)

WebAppDbTest 项目测试 测试工具 ltt介绍安装使用方式1、Drill2、Hammer3、Nailgun 测试主机规格配置CRUD 性能测试对比1、ltt 工具测试1.1、AddSingle 单条数据添加1.2、AddBulk 批量数据&#xff08;1000&#xff09;条添加1.3、GetSingle 单条数据查询1.4、GetAll 多条&…