如何显示(输出)在二进制搜索树中查找值所需的迭代次数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何显示(输出)在二进制搜索树中查找值所需的迭代次数?相关的知识,希望对你有一定的参考价值。

我已经编写了这个程序来创建一个BST,用户可以创建一个树,以及在BST中搜索一个值,但我需要帮助来输出找到这个数字所需的迭代次数而我不这样做知识。我已经创建了一个变量“迭代”,但我不知道如何创建一个方法来收集这个数字。任何想法如何在我的程序中实现这一点,如何找到该数字并打印出来?

 import java.util.Scanner;  


 /* 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
");          
     char ch;
     /*  Accept input  */
     do    
     {
         System.out.println("Enter integer element to insert");
         bst.insert( scan.nextInt() );                     



         System.out.println("
Do you want to continue (Type y or n) 
");
         ch = scan.next().charAt(0);  


     } while (ch == 'Y'|| ch == 'y');   
     System.out.println("
Enter 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();

 }

}
答案

我会创建一个名为iterations的全局int变量,该变量最初为零。

然后,在你拥有的每个方法的循环中,增加iterations。在每个方法的开头,您必须将iterations重置为零。

然后,编写一个名为getLastIterationCount的方法,它返回迭代:

public int getLastIterationCount(){
    return iterations;
}

如果要查找使用了多少次迭代,请调用getIterationCount()并打印结果。例如,要查看preorder()需要多少次迭代,请写下:

preorder(...);
System.out.println(bst.getLastIterationCount());

以下是您的BST类的外观:

/* Class BST */
class BST
{
 private Node root;
 private int iterations;

... 

  /* 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;
    ...
    return found;
}

public int getLastIterationCount(){
    return iterations;
}

}
另一答案

定义一个名为SearchResult的辅助类,它包含两个成员:founditerations

你的search(..)方法返回这个类,而不是boolean

另一答案

我只需要设置iterations = 1然后稍后递增并使用'bst.getLastIterationCount()'而不是'getLastIterationCount()'打印出来,因为该方法在bst类中。

以上是关于如何显示(输出)在二进制搜索树中查找值所需的迭代次数?的主要内容,如果未能解决你的问题,请参考以下文章

为 Facebook 和 LinkedIn 提供特定值所需的元标记?

如何计算二分查找复杂度

左值所需的左值

如何在 WPF 中实现“查找下一个”功能?

在 Windows 批处理脚本的 for 循环中未通过“查找”命令获得所需的输出

如何使用递归在最小零钱问题中输出实际的硬币组合