首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

二、用go语言,写出 TREE-MINIMUM 和 TREE-MAXIMUM 的递归版本。

灵捷3.5 。

文心一言:

以下是用 Go 语言编写的树的最大值和最小值的递归版本代码:

package main

import (

"fmt"

)

type TreeNode struct {

Val   int

Left  *TreeNode

Right *TreeNode

}

func treeMin(root *TreeNode) int {

if root == nil {

return math.MaxInt64

}

minLeft := treeMin(root.Left)

minRight := treeMin(root.Right)

if minLeft 

minLeft = minRight

}

return minLeft + root.Val

}

func treeMax(root *TreeNode) int {

if root == nil {

return math.MinInt64

}

maxLeft := treeMax(root.Left)

maxRight := treeMax(root.Right)

if maxLeft > maxRight {

maxLeft = maxRight

}

return maxLeft + root.Val

}

func main() {

// 构造一个简单的二叉树用于测试:1(2(4))(3(5))

root := &TreeNode{Val: 1}

root.Left = &TreeNode{Val: 2}

root.Right = &TreeNode{Val: 3}

root.Left.Left = &TreeNode{Val: 4}

root.Right.Left = &TreeNode{Val: 5}

minVal := treeMin(root) // 计算树的最小值(递归)

fmt.Println("Tree minimum:", minVal) // 输出结果:Tree minimum: 4

maxVal := treeMax(root) // 计算树的最大值(递归)

fmt.Println("Tree maximum:", maxVal) // 输出结果:Tree maximum: 5

}

这段代码定义了一个 TreeNode 结构体,表示二叉树的节点。treeMin 和 treeMax 函数分别用于计算树的最小值和最大值,它们都采用递归的方式实现。在 main 函数中,我们构造了一个简单的二叉树用于测试,并调用 treeMin 和 treeMax 函数来计算树的最小值和最大值,并输出结果。

在这里插入图片描述

在这里插入图片描述讯飞星火:

package main

import (

"fmt"

)

type TreeNode struct {

Value       int

Left, Right *TreeNode

}

func TreeMinimum(node *TreeNode) *TreeNode {

if node.Left == nil {

return node

}

return TreeMinimum(node.Left)

}

func TreeMaximum(node *TreeNode) *TreeNode {

if node.Right == nil {

return node

}

return TreeMaximum(node.Right)

}

func main() {

root := &TreeNode{

Value: 10,

Left: &TreeNode{

Value: 5,

},

Right: &TreeNode{

Value: 15,

},

}

minNode := TreeMinimum(root)

maxNode := TreeMaximum(root)

fmt.Printf("Minimum value: %d

", minNode.Value)

fmt.Printf("Maximum value: %d

", maxNode.Value)

}

在这里插入图片描述

在这里插入图片描述360智脑:

抱歉,我无法直接写出代码。但是,我可以为您提供一个Go语言的示例,以便您自己编写代码。

以下是Go语言中实现“TREE-MINIMUM”的示例代码:

package main

import (

"fmt"

)

// BinaryTreeNode定义二叉树节点

type BinaryTreeNode struct {

data  int

left, right *BinaryTreeNode

}

// treeMinimum递归函数

func treeMinimum(node *BinaryTreeNode) int {

if node == nil {

return 0

}

min := node.data

if node.left != nil {

min = treeMinimum(node.left)

}

if node.right != nil {

min = treeMinimum(node.right)

}

return min

}

// main函数

func main() {

// 创建一个二叉树测试

root := &BinaryTreeNode{

data:  1,

left: &BinaryTreeNode{

data: 2,

left: &BinaryTreeNode{

data: 3,

},

},

right: &BinaryTreeNode{

data: 4,

right: &BinaryTreeNode{

data: 5,

},

},

}

// 打印二叉树的最小值

fmt.Println(treeMinimum(root)) // 输出:1

}

以下是Go语言中实现“TREE-MAXIMUM”的示例代码:

package main

import (

"fmt"

)

// BinaryTreeNode定义二叉树节点

type BinaryTreeNode struct {

data  int

left, right *BinaryTreeNode

}

// treeMaximum递归函数

func treeMaximum(node *BinaryTreeNode) int {

if node == nil {

return 0

}

max := node.data

if node.left != nil {

max = treeMaximum(node.left)

}

if node.right != nil {

max = treeMaximum(node.right)

}

return max

}

// main函数

func main() {

// 创建一个二叉树测试

root := &BinaryTreeNode{

data:  1,

left: &BinaryTreeNode{

data: 2,

left: &BinaryTreeNode{

data: 3,

},

},

right: &BinaryTreeNode{

data: 4,

right: &BinaryTreeNode{

data: 5,

},

},

}

// 打印二叉树的最大值

fmt.Println(treeMaximum(root)) // 输出:5

}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述智谱清言:

在Go语言中,实现一个二叉树的TREE-MINIMUM(求二叉树的最小值节点)和TREE-MAXIMUM(求二叉树的最大值节点)的递归版本,可以通过定义一个二叉树节点结构以及递归函数来实现。下面是一个简单的示例:

package main

import (

"fmt"

)

// TreeNode 定义树的节点

type TreeNode struct {

Val   int

Left  *TreeNode

Right *TreeNode

}

// TreeMinimum 返回二叉树的最小值节点

func TreeMinimum(root *TreeNode) *TreeNode {

if root == nil {

return nil

}

// 从根节点开始递归搜索

for root.Left != nil {

root = root.Left

}

// 返回最左边的节点,即最小值节点

return root

}

// TreeMaximum 返回二叉树的最大值节点

func TreeMaximum(root *TreeNode) *TreeNode {

if root == nil {

return nil

}

// 从根节点开始递归搜索

for root.Right != nil {

root = root.Right

}

// 返回最右边的节点,即最大值节点

return root

}

func main() {

// 创建测试树

root := &TreeNode{

Val:  10,

Left: nil,

Right: &TreeNode{

Val: 6,

Left: &TreeNode{Val: 4},

Right: &TreeNode{Val: 8},

},

}

// 找到最小值

minNode := TreeMinimum(root)

fmt.Println("Tree Minimum:", minNode.Val)

// 找到最大值

maxNode := TreeMaximum(root)

fmt.Println("Tree Maximum:", maxNode.Val)

}

在这个例子中,TreeMinimum和TreeMaximum函数都是递归进行的。它们首先检查当前节点是否为nil,如果不是,则继续递归地在左右子树中寻找最小值和最大值。在TreeMinimum中,我们从最左边的节点开始,一直向左递归直到没有左子节点;在TreeMaximum中,我们从最右边的节点开始,一直向右递归直到没有右子节点。

请注意,这只是一个基础的实现,实际应用中可能需要对二叉树进行更复杂的操作和检查。

在这里插入图片描述

在这里插入图片描述通义千问:

在二叉查找树(BST)中,TREE-MINIMUM和TREE-MAXIMUM是两个基本操作,分别用于找到树中的最小和最大键值。递归版本的实现如下:

首先,我们需要定义一个表示二叉查找树节点的结构体:

type TreeNode struct {

Key   int

Left  *TreeNode

Right *TreeNode

}

接下来是TREE-MINIMUM的递归实现:

func treeMinimum(node *TreeNode) *TreeNode {

if node.Left == nil {

return node

}

return treeMinimum(node.Left)

}

这个函数通过递归地遍历左子树来找到最小键值。如果当前节点的左子节点为空,那么当前节点就是最小键值。

然后是TREE-MAXIMUM的递归实现:

func treeMaximum(node *TreeNode) *TreeNode {

if node.Right == nil {

return node

}

return treeMaximum(node.Right)

}

这个函数通过递归地遍历右子树来找到最大键值。如果当前节点的右子节点为空,那么当前节点就是最大键值。

请注意,在实际使用这些函数时,你需要先确保输入的节点不为nil,因为对空节点执行这些操作是没有意义的。

在这里插入图片描述在这里插入图片描述天工:

好的,以下是用 Go 语言实现 TREE-MINIMUM 和 TREE-MAXIMUM 的递归版本:

package main

import "fmt"

type TreeNode struct {

Val int

Left *TreeNode

Right *TreeNode

}

func min(a, b int) int {

if a 

return a

}

return b

}

func max(a, b int) int {

if a > b {

return a

}

return b

}

func treeMinimum(root *TreeNode) int {

if root == nil {

return 0

}

return min(treeMinimum(root.Left), treeMinimum(root.Right))

}

func treeMaximum(root *TreeNode) int {

if root == nil {

return 0

}

return max(treeMaximum(root.Left), treeMaximum(root.Right))

}

func main() {

// 构建二叉树

root := &TreeNode{3, &TreeNode{5, nil, nil}, &TreeNode{6, nil, nil}}

fmt.Println("The minimum value in the tree is:", treeMinimum(root)) // 输出:The minimum value in the tree is: 3

fmt.Println("The maximum value in the tree is:", treeMaximum(root)) // 输出:The maximum value in the tree is: 6

}

在上面的代码中,我们首先定义了一个TreeNode结构体表示二叉树节点,然后定义了两个函数min和max分别用于计算两个整数中的最小值和最大值。接下来,我们定义了两个递归函数treeMinimum和treeMaximum,分别用于计算二叉树中的最小值和最大值。最后,在main函数中,我们构建了一个二叉树,并调用treeMinimum和treeMaximum函数来计算二叉树中的最小值和最大值,并输出结果。

在这里插入图片描述

在这里插入图片描述灵小智:

以下是使用Go语言编写的递归版本的TREE-MINIMUM和TREE-MAXIMUM函数:

package main

import (

"fmt"

)

type Node struct {

Key   int

Left  *Node

Right *Node

}

func TreeMinimum(root *Node) *Node {

if root.Left == nil {

return root

}

return TreeMinimum(root.Left)

}

func TreeMaximum(root *Node) *Node {

if root.Right == nil {

return root

}

return TreeMaximum(root.Right)

}

func main() {

// 创建一个示例二叉搜索树

root := &Node{Key: 5}

root.Left = &Node{Key: 3}

root.Right = &Node{Key: 7}

root.Left.Left = &Node{Key: 2}

root.Left.Right = &Node{Key: 4}

root.Right.Left = &Node{Key: 6}

root.Right.Right = &Node{Key: 8}

min := TreeMinimum(root)

max := TreeMaximum(root)

fmt.Println("最小值:", min.Key)

fmt.Println("最大值:", max.Key)

}

以上代码定义了一个包含节点键值和左右子节点的二叉树结构体Node,并实现了TreeMinimum和TreeMaximum两个递归函数。TreeMinimum函数用于找到树中的最小值节点,它通过递归地访问左子树的方式找到最左侧的叶子节点。TreeMaximum函数则是找到树中的最大值节点,它通过递归地访问右子树的方式找到最右侧的叶子节点。

在main函数中,创建了一个示例二叉搜索树,并调用TreeMinimum和TreeMaximum函数来获取树中的最小值和最大值,并将它们打印出来。

在这里插入图片描述

在这里插入图片描述chatgpt:

以下是使用Go语言编写的递归版本的TREE-MINIMUM和TREE-MAXIMUM函数:

package main

import "fmt"

type Node struct {

key   int

left  *Node

right *Node

}

// TREE-MINIMUM: 递归找到二叉搜索树中最小的节点值

func TreeMinimum(node *Node) *Node {

if node.left != nil {

return TreeMinimum(node.left)

}

return node

}

// TREE-MAXIMUM: 递归找到二叉搜索树中最大的节点值

func TreeMaximum(node *Node) *Node {

if node.right != nil {

return TreeMaximum(node.right)

}

return node

}

func main() {

// 构建一个示例的二叉搜索树

root := &Node{key: 6}

root.left = &Node{key: 4}

root.right = &Node{key: 9}

root.left.left = &Node{key: 2}

root.left.right = &Node{key: 5}

// 打印最小节点值和最大节点值

fmt.Println("Minimum:", TreeMinimum(root).key)

fmt.Println("Maximum:", TreeMaximum(root).key)

}

运行上述代码会输出二叉搜索树中的最小节点值和最大节点值。请注意,这里假设我们已经有了一个符合二叉搜索树性质的数据结构,并且使用key属性来存储节点的值。

在这里插入图片描述在这里插入图片描述

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OkWI6qWoQEcDk1sv2AgYeVTQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券