我在GO中实现了各种数据结构和算法,在我第一次运行BST时,我在这段代码上遇到以下错误:
func insert(t Tree, k Node) {
var newT Tree
if t.root==nil {
t.setRoot(k)
}
else if k.key < t.root.key {
newT.setRoot(t.root.lc, newT)
insert(newT,k)
}
else {
newT.setRoot(t.root.rc, newT)
insert(newT,k)
}
}
该行:
// else is highlighted as an "unknown token" the bracket is ": or newline expected" and everything else is "unknown token"
else {
newT.setRoot(t.root.rc, newT)
insert(newT,k)
}
看着这个:
https://gobyexample.com/if-else
看起来这应该有效,所以我很困惑我在这里做错了什么
答案 0 :(得分:7)
else
必须与}
位于同一行,因为}
与行尾之间会自动插入分号。
func insert(t Tree, k Node) {
var newT Tree
if t.root == nil {
t.setRoot(k)
} else if k.key < t.root.key {
newT.setRoot(t.root.lc, newT)
insert(newT, k)
} else {
newT.setRoot(t.root.rc, newT)
insert(newT, k)
}
}
答案 1 :(得分:0)
当你发现自己写作时:
if ... {
} else if ... {
} else if ...
最好转到switch
:
switch {
case ...: blah
case ...: blahblah
case ...: blahblahblah
}
在你的情况下,那将是:
switch {
case t.root == nil: t.setRoot(k)
case k.key < t.root.key:
newT.setRoot(t.root.lc, newT)
insert(newT, k)
default:
newT.setRoot(t.root.rc, newT)
insert(newT, k)
}