网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

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

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

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

packagemain
import"fmt"
typeTreeNodestruct{
Valint
Left*TreeNode
Right*TreeNode
}
funcinsert(root*TreeNode,valint)*TreeNode{
ifroot==nil{
return&TreeNode{Val:val,Left:nil,Right:nil}
}
ifvalroot.Left=insert(root.Left,val)
}elseifval>root.Val{
root.Right=insert(root.Right,val)
}
returnroot
}
funcinorderTraversal(root*TreeNode){
ifroot!=nil{
inorderTraversal(root.Left)
fmt.Println(root.Val)
inorderTraversal(root.Right)
}
}
funcmain(){
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 函数来验证结果。

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

packagemain
import(
"fmt"
)
typeTreeNodestruct{
Valueint
Left,Right*TreeNode
}
funcTreeInsert(root*TreeNode,valueint)*TreeNode{
ifroot==nil{
return&TreeNode{Value:value}
}
ifvalueroot.Left=TreeInsert(root.Left,value)
}elseifvalue>root.Value{
root.Right=TreeInsert(root.Right,value)
}
returnroot
}
funcmain(){
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)
}
funcprintInOrder(node*TreeNode){
ifnode!=nil{
printInOrder(node.Left)
fmt.Printf("%d",node.Value)
printInOrder(node.Right)
}
}

360智脑:

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

packagemain
import(
"fmt"
)
//定义树
typeBinaryTreestruct{
valueint
left,right*BinaryTree
}
//新树
funcNewBinaryTree(rootValint)*BinaryTree{
return&BinaryTree{value:rootVal,left:nil,right:nil}
}
//插入树
func(bst*BinaryTree)Insert(valint){
ifbst==nil||valbst.left=NewBinaryTree(val)
}elseifval>bst.value{
bst.right=NewBinaryTree(val)
}else{
fmt.Println("错误:值必须在树中")
return
}
bst.value=val
}
funcmain(){
//定义切片存放树的元素
array:=[]int{6,3,8,2,5,1,7}
varbst*BinaryTree
for_,v:=rangearray{
bst=bst.Insert(v)
}
fmt.Println("插入后的树:")
bst.PreOrder()
fmt.Println()
bst.InOrder()
fmt.Println()
bst.PostOrder()
}

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

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

  • •每个节点都有一个作为关键字的值,该值唯一存在于树中。
  • •左子树上所有节点的值均小于它的根节点的值。
  • •右子树上所有节点的值均大于它的根节点的值。

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

TREE-INSERT

TREE-INSERT

packagemain
import(
"fmt"
)
typeTreeNodestruct{
Valueint
Left*TreeNode
Right*TreeNode
}
//TREE-INSERT过程的递归版本
functreeInsert(t*TreeNode,keyint)*TreeNode{
//如果当前节点是nil(即到达了树的末端),则创建一个新节点
ift==nil{
return&TreeNode{Value:key}
}
//如果新键值小于当前节点的键值,则在左子树中递归插入
ifkeyt.Left=treeInsert(t.Left,key)
}elseifkey>t.Value{//如果新键值大于当前节点的键值,则在右子树中递归插入
t.Right=treeInsert(t.Right,key)
}
//返回当前节点(可能已经更新)
returnt
}
funcmain(){
//创建一个空的二叉搜索树
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遍历的方式打印树,验证是否正确插入
varinorderfunc(t*TreeNode)
inorder=func(t*TreeNode){
ift==nil{
return
}
inorder(t.Left)
fmt.Println(t.Value)
inorder(t.Right)
}
//开始inorder遍历
inorder(root)
}

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

treeInsert

nil

main

treeInsert

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

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

TREE-INSERT

Tree

packagemain
import"fmt"
typeTreestruct{
valueint
left*Tree
right*Tree
}
//RecursiveTREE_INSERTfunction
functreeInsert(root**Tree,z*Tree){
if*root==nil{
*root=z
return
}
//Comparethenewnode'svaluewiththecurrentroot'svalue
if(*root).value>z.value{
//Ifthenewnode'svalueissmaller,insertintotheleftsubtree
treeInsert(&(*root).left,z)
}else{
//Ifthenewnode'svalueislargerorequal,insertintotherightsubtree
treeInsert(&(*root).right,z)
}
}
funcmain(){
varroot*Tree
z:=&Tree{value:10}
treeInsert(&root,z)
y:=&Tree{value:5}
treeInsert(&root,y)
x:=&Tree{value:15}
treeInsert(&root,x)
fmt.Println("In-ordertraversal:")
inorderTraversal(root)
}
//Helperfunctiontoprintin-ordertraversalofabinarysearchtree
funcinorderTraversal(t*Tree){
ift!=nil{
inorderTraversal(t.left)
fmt.Printf("%d",t.value)
inorderTraversal(t.right)
}
}

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

Tree

treeInsert

z

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

main

treeInsert

inorderTraversal

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

TREE-INSERT

天工:

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

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

其中,结构体定义如下:

Node

typeNodestruct{
keyint
valint
left*Node
right*Node
}

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

灵小智,代码正常运行:

以下是一个用Go语言编写的递归版本的TREE-INSERT过程示例:

packagemain
import"fmt"
typeNodestruct{
keyint
left*Node
right*Node
}
funcinsert(root*Node,keyint)*Node{
ifroot==nil{
root=&Node{key:key,left:nil,right:nil}
returnroot
}
ifkeyroot.left=insert(root.left,key)
}elseifkey>root.key{
root.right=insert(root.right,key)
}
returnroot
}
funcinorder(root*Node){
ifroot!=nil{
inorder(root.left)
fmt.Printf("%d",root.key)
inorder(root.right)
}
}
funcmain(){
varroot*Node
keys:=[]int{15,10,20,8,12,18,25}
for_,key:=rangekeys{
root=insert(root,key)
}
fmt.Println("Inordertraversalofthebinarysearchtree:")
inorder(root)
}

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

Node

insert

inorder

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

main

inorder

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

chatgpt:

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

typeNodestruct{
keyint
left*Node
right*Node
}
funcinsert(root*Node,keyint)*Node{
ifroot==nil{
return&Node{key:key}
}
ifkeyroot.left=insert(root.left,key)
}elseifkey>root.key{
root.right=insert(root.right,key)
}
returnroot
}

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

insert

kimi,抛panic:

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

packagemain
typeNodestruct{
keyinterface{}//可以是任何可比较的数据类型,如int、string等
left*Node
right*Node
}
func(n*Node)TreeInsert(keyinterface{})*Node{
ifn==nil{
return&Node{key:key}
}
ifkey.(int)n.left=n.left.TreeInsert(key)
}else{
n.right=n.right.TreeInsert(key)
}
returnn
}
funcmain(){
root:=&Node{}
keys:=[]int{8,3,10,1,6,14,4,7,13}
for_,key:=rangekeys{
root=root.TreeInsert(key)
}
//中序遍历(左子树->当前节点->右子树),输出二叉搜索树的元素
inOrderTraversal(root)
}
funcinOrderTraversal(n*Node){
ifn!=nil{
inOrderTraversal(n.left)
fmt.Println(n.key)
inOrderTraversal(n.right)
}
}

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

Node

TreeInsert

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

main

inOrderTraversal

声明:内容由AI生成

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
美智库给中国提要求:要么成第二个韩国,要么像俄伊那样毁灭

美智库给中国提要求:要么成第二个韩国,要么像俄伊那样毁灭

第一军情
2024-06-19 10:23:47
民营企业风声鹤唳,多地补税风波持续上演,税务人士回应:并没有

民营企业风声鹤唳,多地补税风波持续上演,税务人士回应:并没有

眼光很亮
2024-06-20 08:00:19
“中国首次将核弹头置于高度战备状态”

“中国首次将核弹头置于高度战备状态”

枢密院十号
2024-06-17 23:44:53
乔治:交易来哈登增强了进攻,但脏活都我和莱昂纳德来干了

乔治:交易来哈登增强了进攻,但脏活都我和莱昂纳德来干了

懂球帝
2024-06-20 13:17:09
刷爆热搜的17岁数学天才姜萍,从上神坛到被扒捞女只花了2天?

刷爆热搜的17岁数学天才姜萍,从上神坛到被扒捞女只花了2天?

新氧
2024-06-19 10:10:42
刚刚传来一条愤怒的消息,2亿股民请避雷,明天A股会大涨吗?

刚刚传来一条愤怒的消息,2亿股民请避雷,明天A股会大涨吗?

一丛深色花儿
2024-06-20 15:12:48
美国重磅消息,国民党和民众党都急了,连胜文:两岸不能互相残杀

美国重磅消息,国民党和民众党都急了,连胜文:两岸不能互相残杀

千里持剑
2024-06-20 15:23:29
陈晓未回应离婚传言,葛斯齐揭内幕:陈妍希常年一个人回台湾

陈晓未回应离婚传言,葛斯齐揭内幕:陈妍希常年一个人回台湾

山野下
2024-06-20 11:19:08
华晨宇香港演唱会造型曝光,想走林佳树路线,网友热议太“奇葩”

华晨宇香港演唱会造型曝光,想走林佳树路线,网友热议太“奇葩”

娱乐白名单
2024-06-19 10:55:48
科普:女人“羞羞”时,可以承受多粗的“武器”?

科普:女人“羞羞”时,可以承受多粗的“武器”?

喜马拉雅主播暮霭
2024-06-20 08:55:00
给摩洛哥队建议?索斯盖特打趣:怎么建议,进世界杯四强的是你们

给摩洛哥队建议?索斯盖特打趣:怎么建议,进世界杯四强的是你们

直播吧
2024-06-20 18:07:25
图们江出海口通航新推进:俄朝签署修建公路桥协议!或由我国来建

图们江出海口通航新推进:俄朝签署修建公路桥协议!或由我国来建

科普大世界
2024-06-20 16:20:02
男性160-190cm标准体重对照表,可能自己并不胖,不用减肥

男性160-190cm标准体重对照表,可能自己并不胖,不用减肥

增肌减脂
2024-06-20 16:28:01
上海市人民政府原副市长刘振元一行莅临丁墘村考察指导工作

上海市人民政府原副市长刘振元一行莅临丁墘村考察指导工作

国际传媒
2024-06-20 18:10:27
喜讯!叶海洋三胎产下双胞胎儿子,两女儿一人抱一个笑的合不拢嘴

喜讯!叶海洋三胎产下双胞胎儿子,两女儿一人抱一个笑的合不拢嘴

阿燕姐说育儿
2024-06-20 16:17:24
余琦被立案调查!老公身份被曝,狗受牵连,前同事曝光其真实人品

余琦被立案调查!老公身份被曝,狗受牵连,前同事曝光其真实人品

暖心的小屋
2024-06-20 12:27:20
杭州保姆纵火案通灵记录:通灵人与被害人交流,得知朱小贞真实死因

杭州保姆纵火案通灵记录:通灵人与被害人交流,得知朱小贞真实死因

古今档案
2024-06-18 20:56:33
取消对华免签,还拒绝中国的高铁,甚至放言:“不欢迎中国人”!

取消对华免签,还拒绝中国的高铁,甚至放言:“不欢迎中国人”!

星辰故事屋
2024-06-18 10:54:05
今天是6月20号晚间,突然曝出1个重大消息,明天要来大动作吗?

今天是6月20号晚间,突然曝出1个重大消息,明天要来大动作吗?

股市皆大事
2024-06-20 15:24:30
武汉房价全军覆灭,武汉水果湖房价跌至30000多元,武汉楼市分析

武汉房价全军覆灭,武汉水果湖房价跌至30000多元,武汉楼市分析

有事问彭叔
2024-06-20 17:44:04
2024-06-20 21:10:44
moonfdd
moonfdd
福大大架构师每日一题
428文章数 7关注度
往期回顾 全部

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

头条要闻

被保险人"呼吸心跳骤停"死亡 保险公司以猝死为由拒赔

头条要闻

被保险人"呼吸心跳骤停"死亡 保险公司以猝死为由拒赔

体育要闻

绿军的真老大,开始备战下赛季了

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

深圳一网红学位房14万/平跌到4万/平

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

数码
健康
旅游
公开课
军事航空

数码要闻

双塔双风扇8热管!超频三泰拉巨风RZ820风冷散热器图赏

晚餐不吃or吃七分饱,哪种更减肥?

旅游要闻

铁路儿童票新规 已有超4900万小旅客免费出行

公开课

近视只是视力差?小心并发症

军事要闻

以军发言人公开表示"哈马斯无法被消灭" 以政府反驳

无障碍浏览 进入关怀版