go - BST golang 搜索功能
问题描述
你能帮忙搜索功能吗,它总是返回零,我不明白为什么
func BTreeSearchItem(root *TreeNode, elem string) *TreeNode {
if root == nil {
return nil
}
if root.Data < elem {
return BTreeSearchItem(root.Left, elem)
} else if root.Data > elem {
return BTreeSearchItem(root.Right, elem)
}
return root
}
试图这样做,但它返回 4 而不是 7
func BTreeSearchItem(root *TreeNode, elem string) *TreeNode {
if root == nil {
return nil
}
if root.Data < elem {
BTreeSearchItem(root.Left, elem)
} else if root.Data > elem {
BTreeSearchItem(root.Right, elem)
}
return root
}
完整代码是
package main
import "fmt"
type TreeNode struct {
Left, Right, Parent *TreeNode
Data string
}
func BTreeSearchItem(root *TreeNode, elem string) *TreeNode {
if root == nil {
return nil
}
if root.Data < elem {
BTreeSearchItem(root.Left, elem)
} else if root.Data > elem {
BTreeSearchItem(root.Right, elem)
}
return root
}
func BTreeInsertData(root *TreeNode, data string) *TreeNode {
if root == nil {
return &TreeNode{Data: data}
}
if root.Data == data {
return nil
}
if root.Data > data {
if root.Left == nil {
root.Left = &TreeNode{Data: data}
}
return BTreeInsertData(root.Left, data)
}
if root.Data < data {
if root.Right == nil {
root.Right = &TreeNode{Data: data}
}
return BTreeInsertData(root.Right, data)
}
return root
}
func main() {
root := &TreeNode{Data: "4"}
BTreeInsertData(root, "1")
BTreeInsertData(root, "7")
BTreeInsertData(root, "5")
selected := BTreeSearchItem(root, "7")
fmt.Print("Item selected -> ")
if selected != nil {
fmt.Println(selected.Data)
} else {
fmt.Println("nil")
}
fmt.Print("Parent of selected item -> ")
if selected.Parent != nil {
fmt.Println(selected.Parent.Data)
} else {
fmt.Println("nil")
}
fmt.Print("Left child of selected item -> ")
if selected.Left != nil {
fmt.Println(selected.Left.Data)
} else {
fmt.Println("nil")
}
fmt.Print("Right child of selected item -> ")
if selected.Right != nil {
fmt.Println(selected.Right.Data)
} else {
fmt.Println("nil")
}
}
搜索了互联网并通过方法找到了很多,但我需要作为功能。我是编程的初学者,所以我很难理解
解决方案
我的建议是在调用函数之前检查root
in的值。我怀疑价值观本身已经处于那个阶段。main()
BTreeSearchItem
root
nil
推荐阅读
- django - Django,如何使用过滤器检查字符串字段是否是参数的子字符串?
- linux - VirtualBox下的bpftrace
- ios - 无法使用 Firebase 在 iOS 应用中安装 pod
- java - ConstraintViolationException 不能同时用于 DTO 和 MODEL 类
- vue.js - Vue如何查看json数据的内部值
- windows - 为 mklink 命令创建脚本
- caching - 如何在 Flink kinesis 流中共享缓存
- c# - ASP.NET Core 3.1 HttpContext.Connection.ClientCertificate 还是 HttpContext.Connection.GetClientCertificateAsync?
- reactjs - 在 react-native 中解析数据
- neo4j - 如何将所有 Neo4j 关系及其所有标签和属性从一个节点移动到另一个节点?