为什么不终止?

Sil*_*ter -2 algorithm syntax scala

  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
 }
Run Code Online (Sandbox Code Playgroud)

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

And*_*yle 5

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

你的循环是一种while状态,这将循环,直到tnull.因此,当t非空时,循环将继续.

您只能分配t给非空值 - 实际上您是专门检查null情况并通过创建新节点来停止它.

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

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