为什么不终止?

时间:2011-12-06 17:17:47

标签: algorithm scala syntax

  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
 }

我写了迭代版本,将节点插入二叉搜索树。我想在创建节点时终止,但它不会停止,因为我认为我没有分配终止条件。如何编辑我的代码以在插入节点时终止?

2 个答案:

答案 0 :(得分:5)

我不确定你想要什么行为,但原因很清楚。

您的循环是while条件,它将循环直到tnull。因此,当t为非null时,循环将继续。

您只需将t分配给非空值 - 实际上您专门检查空案例并通过创建新节点来停止它。

因此,您需要重新考虑循环条件,或者确保t在某些情况下确实变为空,具体取决于您的实际算法要求。

由于你在底部返回t,我认为while条件是错误的;唯一可能终止的方法是此时t为空,所以无论如何返回它都是没有意义的。

答案 1 :(得分:4)

你的第一个条款&#34; if&#34;循环中的语句

if(key == t.key) {
    t
}

...如果比较为真,则什么都不做。它不会终止循环。声明t在此不与return t同义。您可以在此时设置flag = 0以终止循环。