2017-11-02 17 views
1

私はBSTにノードを挿入したり再帰的にノードを追加しようとしていました。私は続ける スレッド "main" java.lang.StackOverflowError例外で、私は再帰によって引き起こされていると仮定していますが、どこから行くべきか正確には分かりません。それ。 :)Javaでcomparableを使ってBSTにノードを再帰的に追加する

public void add(Type obj) { 

    TreeNode<Type> newNode = new TreeNode<Type>(obj); 

    if (root == null) { 
     root = newNode; 
    } else { 
     addNode(root, newNode); 
    } 
} 


private void addNode(TreeNode<Type> current, TreeNode<Type> newNode) { 

    current = root; 
    if (current == null) { 
     current = newNode; 
    } else if (newNode.getValue().compareTo(current.getValue()) < 0) { 

     if (current.getLeft() == null) { 
      current.setLeft(newNode); 

     } else { 
      addNode(current.getLeft(), newNode); 
     } 
    } else if (newNode.getValue().compareTo(current.getValue()) > 0) { 

     if (current.getRight() == null) { 
      current.setRight(newNode); 
     } else { 
      addNode(current.getRight(), newNode); 
     } 
    } 
}//end add  

答えて

0
private void addNode(TreeNode<Type> current, TreeNode<Type> newNode) { 

current = root; 
if (current == null) { 
    current = newNode; 
} else if (newNode.getValue().compareTo(current.getValue()) < 0) { 

    if (current.getLeft() == null) { 
     current.setLeft(newNode); 

    } else { 
     addNode(current.getLeft(), newNode); 
    } 

あなたは何度も現在のポイントをrootに設定しているように見えます。 StackOverFlowが発生するので、rootを指すべきではありません。あなたはこのようにそれを変更することができます。

current = root

if(root == null){ 
    root = newNode; 
    return; 
} 
+0

ありがとうございました!愚かな間違いでしたが、助けてくれてありがとう! – KylePhill975

0

まず、あなたがcurrent = root;を割り当てているし、次の行にあなたがチェックしている:

if (current == null) 

この条件は常にfalseを返します(rootと仮定するとnullではありません)。

"else if"の中で何をしているのですが、最初のif部分を削除する必要があります。

第2に、rootnullであるケースを処理する必要があります。最初にルートがnullであるかどうかを確認する別の方法で行います。そうでない場合にのみチェックします。このメソッド(addNode)

+0

ありがとう:あなたはこの行を削除する必要があります!ダミーのように感じるが、少なくともそれは今働いている! – KylePhill975

関連する問題