我正在這棵樹中進行二分搜索,并期望 Find 遞歸在結(jié)果為真時結(jié)束。它確實有一個結(jié)果為真但即使它得到真值并運行返回語句,似乎繼續(xù)運行并最終達到了false當它找到值并返回時,如何使該程序結(jié)束?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條經(jīng)驗 獲得超4個贊
您似乎忽略了Tree.Find遞歸時的返回值。如果您傳遞返回值,您應(yīng)該獲得所需的行為。即修改結(jié)尾為Find:
if val < T.Value {
return T.Left.Find(val)
} else {
return T.Right.Find(val)
}
- 1 回答
- 0 關(guān)注
- 297 瀏覽
添加回答
舉報
0/150
提交
取消