var m_root : Node = root
private def insert(key: Int, value: Int): Node = {
if(m_root == null) {
m_root = Node(key, value, null, null)
}
var t : Node = m_root
var flag : Int = 1
while (t != null && flag == 1) {
if(key == t.key) {
t
}
else if(key < t.key) {
if(t.left == null) {
t.left = Node(key, value, null, null)
flag = 0
} else {
t = t.left
}
} else {
if(t.right == null) {
t.right = Node(key, value, null, null)
flag = 0
} else {
t = t.right
}
}
}
t
}
我写了迭代版本,将节点插入二叉搜索树。我想在创建节点时终止,但它不会停止,因为我认为我没有分配终止条件。如何编辑我的代码以在插入节点时终止?
答案 0 :(得分:5)
我不确定你想要什么行为,但原因很清楚。
您的循环是while
条件,它将循环直到t
为null
。因此,当t
为非null时,循环将继续。
您只需将t
分配给非空值 - 实际上您专门检查空案例并通过创建新节点来停止它。
因此,您需要重新考虑循环条件,或者确保t
在某些情况下确实变为空,具体取决于您的实际算法要求。
由于你在底部返回t
,我认为while条件是错误的;唯一可能终止的方法是此时t
为空,所以无论如何返回它都是没有意义的。
答案 1 :(得分:4)
你的第一个条款&#34; if&#34;循环中的语句
if(key == t.key) {
t
}
...如果比较为真,则什么都不做。它不会终止循环。声明t
在此不与return t
同义。您可以在此时设置flag = 0
以终止循环。