2017-08-05 4 views
0

私はプロジェクトに取り組んで私のプロジェクトで私はツリーを構築する必要があります。樹木には約64000枚の葉があります。 Unfortunetly私はstackoverflowエラーに実行し続けて、私はこの時点で何をすべきか分かりません。私は私の再帰メソッドを間違って書くか、エラーの回避策がありますか?コンストラクタで コード:ビルドと巨大な木とstackoverflowエラーで盗まれている

for(int i = 0; i < wordHolder.size(); i++) { 
      add(i); 
     } 

方法追加:ノードが2つのデータ構造が含まれている標準のノードである

private TreeNode treeSetup(TreeNode node, int letterCount, String s, List<Integer> i) { 
     if(letterCount == 26) { 
      letterCount = 0; 
     } 
     if(node == null) { 
      node = new TreeNode(s,i); 
     } else if (i.get(letterCount) >= node.test.get(letterCount)) { 
      node.right = treeSetup(node.right, letterCount++, s, i); 
     } else if(i.get(letterCount) < node.test.get(letterCount)) { 
      node.left = treeSetup(node.left, letterCount++, s, i); 
     } 
     return node; 
    } 

public void add(int i){ 
     mainTreeNode = treeSetup(mainTreeNode, 0, wordHolder.get(i), countHolder.get(i)); 
    } 

、ツリーを設定再帰的な方法を(リストと文字列)。アイデアは、ノードがそのリストに含まれるものに基づいてスポットに置かれるということです。また、ツリーの各レベルは、リスト(KDツリーのような)とは異なる値に基づいてチェックされるため、letterCount変数が使用されます。問題は、 "if"文に "="記号があるかどうかに基づいて変化します。両方の「if文」から「=」記号を削除すると、問題はなくなりますが、莫大な量の精度が失われます。「助けてください」

答えて

0

これはJavaですか?あなたは指定しなかったが、それはそのように見える。ベストプラクティスの問題以外にも、Javaの場合はif ifが必要な場合は、2 if else ifが必要です。しかし、ケーススタディがこの研究の方が良いかもしれない。

コンストラクタにはforループが必要です。コンストラクタは、オブジェクトのインスタンスを構築するために呼び出す青写真でなければなりません。あなたにスケルトンを与えるためのすべての参照と情報があります。次に、他の方法を使用して肉を与えます。

私が試みる個人的なことは、Treenode treeSetupをコンストラクタのインスタンスのイニシャライザのようにすることです。パラメータを取って、それらを一意性を設定する必要があるオブジェクトインスタンスに渡します。 forループをvoidメソッドの中に入れ、voidの内部のTreenodeメソッドに渡すようにParamsを構築し、すべての情報を渡して、すべての機能を設定します。ノード自体の設定のための

くらい、あなたが列挙型またはスイッチケースを使用する方法を見つけることができれば正直そこにこれを行うには良い方法がありますが、他の迅速かつ汚い

if (letterCount == 26) { 
letterCount = 0; 
} 
if (node != null) { 
if (letterCount %2 == 0) { 
do left stuff 
} else { 
do right stuff 
} 
} 
return 

作品ならより近代的な。 もう1つのことは、奇妙な方法で2つのデータ型を使用していることです。既に、キーと値を含む2つのデータ型に対して完璧な項目があります。

https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

+0

しかし、今私はそのスタックオーバーフローの問題を解決するためのtheresですか? –

+0

また、kdツリーを使用する必要があります。問題はもっと大きく、kdツリーはそれを解決する方法です(その類似性に基づいています) –

関連する問題