我正在此树中执行二进制搜索,并期望结果为true时,查找递归会结束。它确实具有true的结果,但是即使它获得了true值并运行return语句,它似乎也继续运行并最终达到了false
找到值并返回时,如何使该程序结束?
http://play.golang.org/p/miWqRVo_XO
package main
import "fmt"
type Tree struct {
Left *Tree
Value int64
Right *Tree
}
func NewT(val int64) *Tree {
return &Tree{
Left: new(Tree),
Value: val,
Right: new(Tree),
}
}
func (T *Tree) Insert(val int64) *Tree {
if T == nil {
return &Tree{nil, val, nil}
}
if val < T.Value {
T.Left = T.Left.Insert(val)
} else {
T.Right = T.Right.Insert(val)
}
return T
}
func (T *Tree) Find(val int64) bool {
fmt.Printf("%v , %v\n", T.Value, val)
fmt.Printf("%v\n", T.Value == val)
if fmt.Sprintf("%v", T.Value) == fmt.Sprintf("%v", val) {
fmt.Println("True and we do return true")
return true
}
if val < T.Value {
T.Left.Find(val)
} else {
T.Right.Find(val)
}
fmt.Println("False")
return false
}
func main() {
t1 := NewT(5)
for i := 0; i < 10; i++ {
t1 = t1.Insert(int64(i))
}
fmt.Println("Result:", t1.Find(7))
}
输出为
5 , 7
false
0 , 7
false
5 , 7
false
6 , 7
false
7 , 7
true
True and we do return true
Tree.Find
当您递归到它时,您似乎忽略了它的返回值。如果传递返回值,则应该获得所需的行为。也就是说,将的结尾修改为Find
:
if val < T.Value {
return T.Left.Find(val)
} else {
return T.Right.Find(val)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句