バイナリ検索ツリー(ユーザ入力を使用)を実装し、値を検索して実際にこの値を見つけるために必要な反復回数を表示するプログラムを作成することはできません。 イテレーションの数を返すgetLastIterationCount()というメソッドを作成しましたが、メインメソッドで印刷したいときに、 'System.out.println(getLastIterationCount())'という行にエラーが表示されます。 ; '私の方法は正しい場所にないと思うが、何が欠けているのか分からない。どのように私はこのプログラムを動作させることができる任意のアイデア?BSTで値を見つけるために必要な反復回数を出力するにはどうすればよいですか?
/* Class Node */
class Node
{
Node left, right;
int data;
/* Constructor */
public Node(int n)
{
left = null;
right = null;
data = n;
}
/* Function to get data from node */
public int getData()
{
return data;
}
/* Function to get left node */
public Node getLeft()
{
return left;
}
/* Function to get right node */
public Node getRight()
{
return right;
}
}
/* Class BST */
class BST
{
private Node root;
private int iterations;
/* Constructor */
public BST()
{
root = null;
}
/* Functions to insert data */
public void insert(int data)
{
root = insert(root, data);
}
/* Function to insert data recursively */
private Node insert(Node node, int data)
{
if (node == null)
node = new Node(data);
else
{
if (data <= node.data)
node.left = insert(node.left, data);
else
node.right = insert(node.right, data);
}
return node;
}
/* Functions to search for an element */
public boolean search(int val)
{
iterations=0;
iterations++;
return search(root, val);
}
/* Function to search for an element recursively */
private boolean search(Node r, int val)
{
iterations=0;
boolean found = false;
while ((r != null) && !found)
{
int rval = r.getData();
if (val < rval){
r = r.getLeft();
}
else if (val > rval){
r = r.getRight();
}
else
{
found = true;
break;
}
found = search(r, val);
}
return found;
}
public int getLastIterationCount(){
return iterations;
}
}
/* Class LinkedListBST */
public class LinkedListBST
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
/* Creating object of BST */
BST bst = new BST();
System.out.println("Linked List Binary Search Tree Test\n");
char ch;
/* Accept input */
do
{
System.out.println("Enter integer element to insert");
bst.insert(scan.nextInt());
System.out.println("\nDo you want to continue (Type y or n) \n");
ch = scan.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');
System.out.println("\nEnter an element to be searched: ");
Scanner sc = new Scanner(System.in);
System.out.println("Search result : " + bst.search(sc.nextInt()));
System.out.println(getLastIterationCount()); //ISSUE IS HERE
sc.close();
}
}
私はあなたの助言に従いました、ありがとう、それは私の 'System.out.println(getLastIterationCount());のように見えます。 Netbeansによって間違っているように下線が引かれています。私のメソッド 'getLastIterationCount()'が間違った場所にあるので、printステートメントが関数呼び出しを認識できなくなりますか? –
こんにちは私の答えを見て、それを試してみてください! –
@humanbeingはい、特定のツリーインスタンスのカウントを取得するには、 'bst.getLastIterationCount()'を呼び出す必要があります。しかし、私はまた、より大きな問題は、あなたの数えるロジックと考えています。 –