2016-04-30 4 views
0

これはバイナリ検索ツリー内の特定のノードを見つける方法です... 何が問題なのか分かりませんが、何らかの理由でこのコードが正しく機能していません..どんな助け?私はこれを推測しているこのコード(BST)の誤りは何ですか

public KAUstudent findNodeName(String fName, String lName){ 
    return findNodeName(root, fName, lName); 
} 

public KAUstudent findNodeName(KAUstudent p , String fName, String lName){ 
    if (p == null) 
    return null; 
    else { 
    // if the data we are searching for is found at p (at the current root) 
     if (fName.equalsIgnoreCase(p.getFirstName()) && lName.equalsIgnoreCase(p.getLastName())) 
      return p; 
     else if ((fName.compareToIgnoreCase(p.getFirstName())< 0) || (lName.compareToIgnoreCase(p.getLastName()) <0)) 
       return findNodeName(p.getLeft(), fName, lName); 
     else 
       return findNodeName(p.getRight(), fName, lName); 
} 
} 
+0

正しく機能しないことを説明してください。期待していることと何をしているのですか? – ChiefTwoPencils

+0

名前がツリーに存在する場合は、ノードを返す必要があります。それ以外の場合はnullを返す必要があります。しかし、いつかは、名前がexsit – Chie

答えて

-1

は問題

if (fName.equalsIgnoreCase(p.getFirstName()) && lName.equalsIgnoreCase(p.getLastName())) 
      return p; 

両方に該当する場合、それが唯一のpを返します。 &&||に変更してみてください。それはBSTなので、最初の名前と最後の名前が同じレベルのツリーにない可能性があります。 姓の最初の文字列を1つの文字列に結合し、それを検索することができます。あなたがそれをする方法を知りたければ、私はコードを説明します。

+0

の場合でも、nullを返す誰かがこれが投票された理由を説明することはできますか?それは完全に合理的な答えです – sbowde4

+0

私もこれを試してみました。そして、私はまだ同じ問題を抱えています:/ * BSTのすべてのノードは生徒のレコードなので、ファーストとラストネームは同じノードにあります – Chie

+0

ああ、私はそれを認識しませんでした。私はあなたが最初のリストと最後の名前のリストをツリーに挿入していると思った。 – sbowde4

0

主な問題は、キーに適切な「部分的な順序」がないことです。キー比較ロジックは次のようなものでなければなりません。

when majorkey1.compareTo(majorkey2) < 0 : 
     // less than 
    when majorkey1.compareTo(majorkey2) == 0 AND 
     minorkey1.compareTo(minorkey2) < 0 : 
     // less than 
    when majorkey1.compareTo(majorkey2) == 0 AND 
     minorkey1.compareTo(minorkey2) == 0 : 
     // equal to 
    when majorkey1.compareTo(majorkey2) > 0 : 
     // greater than 

これはあなたのコードが実装するものではありません。

更新 - 修正されたバージョンは多かれ少なかれ正確です。あなたが構築されたコードでは:


問題#2(。。最終elseは、コードを慎重に読み、それについて考えて...、あなたは私がそれを言った理由を見ることができるはず冗長です)木、あなたは間違った鍵を完全に使っています。ツリーを検索するとき、および新しいノードをツリーに追加する場所を決定するときは、同じキー/キーペアと同じ比較ロジックを使用する必要があります。

+0

まだ同じ問題:/ – Chie

+0

1)修正されたコードはどのように見えますか? 2)ツリーを構築するコードで同じミスを犯した可能性があります。 –

+0

私は長いコメントを投稿できないので、私は答えを投稿しました – Chie

関連する問題