2017-11-13 10 views
0

バイナリ検索ツリーを検索しようとしていますが、whereステートメントが機能しない理由がわからないようですが、このメソッドはStringの入力を要求します。どのようにこれを修正するための任意の提案?ここでバイナリ検索ツリーの検索で問題が発生しました

は、Nodeクラスである:ここでは

public class Node 
{ 
    String key; 
    Node left, right; 

    public Node(String entry) 
    { 
     key = entry; 
     left = right = null; 
    } 

    public Node getLeft() 
    { 
     return left; 
    } 

    public Node getRight() 
    { 
     return right; 
    } 

    public String getKey(String entry) 
    { 
     if(this.key.equals(key)) 
     { 
      return key; 
     } 

     if(entry.compareTo(this.key) < 0) 
     { 
      return left == null ? null : left.getKey(entry); 
     } 
     else 
     { 
      return right == null ? null : right.getKey(entry); 
     } 
    } 

    public void setLeft(Node left) 
    { 
     this.left = left; 
    } 

    public void setRight(Node right) 
    { 
     this.right = right; 
    } 
} 

は私のバイナリ検索ツリーです:

public class BinarySearchTree 
{ 
    Node root; 

    public BinarySearchTree() 
    { 
     root = null; 
    } 

    public void insert(String key) 
    { 
     root = insertRec(root, key); 
    } 

    public Node insertRec(Node root, String key) 
    { 
     if(root == null) 
     { 
      root = new Node(key); 
      return root; 
     } 

     if(key.compareTo(root.toString()) == -1) 
     { 
      root.setLeft(insertRec(root.getLeft(), key)); 
     } 
     else if(key.compareTo(root.toString()) == 1) 
     { 
      root.setRight(insertRec(root.getRight(), key)); 
     } 

     return root; 
    } 

    public Node search(String key) 
    { 
     return root == null ? null : root.getKey(key); 
    } 

    public void printPostOrder(Node node) 
    { 
     if(node == null) 
      return; 

     printPostOrder(root.getLeft()); 

     printPostOrder(node.getRight()); 

     System.out.print(node.getKey() + ", "); 
    } 

    public void printInOrder(Node node) 
    { 
     if(node == null) 
      return; 

     printInOrder(node.getLeft()); 

     System.out.print(node.getKey() + ", "); 

     printInOrder(node.getRight()); 
    } 

    public void printPreOrder(Node node) 
    { 
     if(node == null) 
      return; 

     System.out.print(node.getKey() + ", "); 

     printPreOrder(node.getLeft()); 

     printPreOrder(node.getRight()); 
    } 

    public void printPostOrder() 
    { 
     printPostOrder(root); 
    } 

    public void printInOrder() 
    { 
     printInOrder(root); 
    } 

    public void printPreOrder() 
    { 
     printPreOrder(root); 
    } 
} 

あなたは私に知らせてくださいより多くの情報が必要な場合は、任意およびすべてのヘルプははるかに高く評価されます。

答えて

0

whats up? getKeyメソッドのクラスノードでコードが間違っています文字列ノードとifが等しくなり、これに戻ります。

例:。

public Node getKey(String entry) 
{ 
    if(this.key.equals(entry)) 
    { 
     return this; 
    } 
} 

このコードを変更すると、

全クラスBinarySearchTreeが検索方法で[OK]を

public class BinarySearchTree 
{ 
    Node root; 

    public BinarySearchTree() 
    { 
     root = null; 
    } 

    public void insert(String key) 
    { 
     root = insertRec(root, key); 
    } 

    public Node insertRec(Node root, String key) 
    { 
     if(root == null) 
     { 
      root = new Node(key); 
      return root; 
     } 

     if(key.compareTo(root.toString()) == -1) 
     { 
      root.setLeft(insertRec(root.getLeft(), key)); 
     } 
     else if(key.compareTo(root.toString()) == 1) 
     { 
      root.setRight(insertRec(root.getRight(), key)); 
     } 

     return root; 
    } 

    public Node search(String key) 
    { 
     return root == null ? null : root.getKey(key); 
    } 

    public void printPostOrder(Node node) 
    { 
     if(node == null) 
      return; 

     printPostOrder(root.getLeft()); 

     printPostOrder(node.getRight()); 

     System.out.print(node.getKey("") + ", "); 
    } 

    public void printInOrder(Node node) 
    { 
     if(node == null) 
      return; 

     printInOrder(node.getLeft()); 

     System.out.print(node.getKey("") + ", "); 

     printInOrder(node.getRight()); 
    } 

    public void printPreOrder(Node node) 
    { 
     if(node == null) 
      return; 

     System.out.print(node.getKey("") + ", "); 

     printPreOrder(node.getLeft()); 

     printPreOrder(node.getRight()); 
    } 

    public void printPostOrder() 
    { 
     printPostOrder(root); 
    } 

    public void printInOrder() 
    { 
     printInOrder(root); 
    } 

    public void printPreOrder() 
    { 
     printPreOrder(root); 
    } 

    public static void main (String args[]){ 
     BinarySearchTree bs = new BinarySearchTree(); 
     bs.insert("A"); 
     bs.search("A"); 
    } 
} 

とノード

public class Node 
{ 
    String key; 
    Node left, right; 

    public Node(String entry) 
    { 
     key = entry; 
     left = right = null; 
    } 

    public Node getLeft() 
    { 
     return left; 
    } 

    public Node getRight() 
    { 
     return right; 
    } 

    public Node getKey(String entry) 
    { 
     if(this.key.equals(key)) 
     { 
      return this; 
     } 

     if(entry.compareTo(this.key) < 0) 
     { 
      return left == null ? null : left.getKey(entry); 
     } 
     else 
     { 
      return right == null ? null : right.getKey(entry); 
     } 
    } 

    public void setLeft(Node left) 
    { 
     this.left = left; 
    } 

    public void setRight(Node right) 
    { 
     this.right = right; 
    } 
} 
+0

完全にテストした 'ヌル:root.getKey(キー);'私は互換性のない型を取得しますが、Nodeは必要ですがStringを検索しますが、Nodeクラスではその項目はStringです。私は元の問題 – Jdmon1998

+0

に戻っていますので、もっと簡単にあなたはString not Node –

関連する問題