2016-12-04 12 views
1

私はバイナリ検索ツリーを持っており、指定された値のノードを探したいと思っています。これは私のコードですが、スタックオーバーフローエラーが発生します。誰かが私に理由を教えてくれることを願っている。 マイコード:あなたが投稿したコードでここでスタックオーバーフローエラーが発生しましたが、理由はわかりません

public TreeNode findNodebyKey2(int val) { 
    if (val == key) { 
     return this; 
    } else if (val < key) { 
      return this.left.findNodebyKey2(val); 
    } else if(val > key){ 
      return this.right.findNodebyKey2(val); 
    } 
    return this; 
} 
+0

に賭ける思います。あなたの 'val == key'条件は決して満たされず、スタックフレームが不足しています – TheLostMind

+0

あなたはスタックオーバーフローエラーを引き起こす再帰呼び出しを使用しています。なぜなら、メソッドが呼び出されるたびに、スタックは操作を実行するためにスタックに割り当てられるからです。 – Shriram

+0

1.データが正しく挿入されているかどうかを確認します。ツリーが正しい場合にのみ機能します。 2.左または右がない場合(NullPointerExceptionが表示されます。一致しない場合は葉にある必要があります)。3.これに到達しない場合は、それを取り除きます。 4. 1,2が正しい場合、StackOverflowはデータが巨大であるかメモリを超過している場合にのみ当てはまるべきです。 – abksrv

答えて

0

を、あなただけの2つの状況でStackOverflowExceptionがを取得することができます:

  1. あなたのツリーは、(レベルの何千も)非常に深いです。したがって、スタックスペースが足りなくなります。

  2. あなたのツリーは実際にはツリーではなく、グラフです(たとえば、現在のノードが与えられている場合はサイクルがあり、そのうち1つが現在のノードの祖先です)。

私はあなたのプログラムをデバッグ2.

関連する問題