我正在这棵树中进行二分搜索,并期望 Find 递归在结果为真时结束。它确实有一个结果为真但即使它得到真值并运行返回语句,似乎继续运行并最终达到了false当它找到值并返回时,如何使该程序结束?http://play.golang.org/p/miWqRVo_XOpackage mainimport "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 , 7false0 , 7false5 , 7false6 , 7false7 , 7trueTrue and we do return true
1 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
您似乎忽略了Tree.Find递归时的返回值。如果您传递返回值,您应该获得所需的行为。即修改结尾为Find:
if val < T.Value {
return T.Left.Find(val)
} else {
return T.Right.Find(val)
}
- 1 回答
- 0 关注
- 263 浏览
添加回答
举报
0/150
提交
取消