gpt4 book ai didi

java - 字符串的二叉搜索树(BST)搜索方法

转载 作者:行者123 更新时间:2023-11-30 05:35:56 26 4
gpt4 key购买 nike

我已经构建了一个 BST,其元素为(国家/地区代码(字符串)、指标代码(字符串)、指标名称(字符串)以及年份数组列表(int)和值(字符串))。

我试图找出如何提示用户通过输入指标代码进行搜索,然后输入输出值的年份。

如果您能展示如何编写搜索方法,我将不胜感激,因为我已经尝试了一切。

我在 BST 课上尝试过这个。但感觉不太对劲(?)

public void search(Indicator indicator, String searchTerm){ 

String str = (String)indicator.getICode();
int n1 = str.compareTo(searchTerm);
int n2 = searchTerm.compareTo(str);

if (str == null || str.equalsIgnoreCase(searchTerm)){
return str;
}

if (n1 > n2){
return search(indicator, searchTerm);
}

else if (n1 < n2){
return search(indicator, searchTerm);
}
}

这是我的应用程序类:

public class BigDataBST{
public static void main (String [] Args) throws IOException {
try{
BST bigdata = new BST();
MyData d1;

File inFile = new File ("Indicator.txt");
FileReader fr = new FileReader (inFile);
BufferedReader br = new BufferedReader(fr);
String str = br.readLine();

while(str != null ){
StringTokenizer st = new StringTokenizer(str,";");
ArrayList <MyData> data = new ArrayList();

String cCode = st.nextToken();
String iName = st.nextToken();
String iCode = st.nextToken();

for (int j = 0; j < 59; j++){
String v = st.nextToken();
int year = 1960 + j;

d1 = new MyData (year,v);
data.add(d1);
}
Indicator idct = new Indicator (cCode,iName,iCode,data);
bigdata.insertNode(idct);

str = br.readLine();
}

TreeNode类:

    TreeNode left;
TreeNode right;
Indicator idct;

public TreeNode(Indicator id){
left = right = null;
idct = id;
}

指标类别:

    private String cCode;   //country code
private String iName; //indicator Name;
private String iCode; //indicator code;
public ArrayList <MyData> DataList;

public Indicator(){
cCode = null;
iName = null;
iCode = null;
DataList = null;
}

public Indicator(String cCode, String iName, String iCode,ArrayList <MyData> DataList){
this.cCode = cCode;
this.iName = iName;
this.iCode = iCode;
this.DataList = DataList;
}

//setter & getter method for attributes iCode,iName and cCode
//toString method

MyData 类:

    private int year;
private String value;

public MyData(){
year = 0;
value = null;
}

public MyData(int year, String value){
this.year = year;
this.value = value;
}

//setter & getter method for attributes year and value
//toString method

indicator.txt 示例:
(从左至右:cCode;iName;iCode;值)
我的;工业就业(占总就业的百分比)(模拟国际劳工组织的估计); SL.IND.EMPL.ZS;

29,08600044;28,56900024;28,36300087;28,02300072;27,51600075;27,48699951;27,39800072;27,30500031

最佳答案

我认为您不知道如何在二叉搜索树中进行搜索。您可以通过转到每个节点来完成此操作,并可以使用递归来完成此操作。

在您的 search() 中,您将 Indicator 作为参数,但实际上您需要采用 TreeNode 因为每个节点都有一个数据您可以访问的 Indicator 类型。

在您的search()中,您使用相同的参数一次又一次地调用search(),这永远不会给您结果。此外,您没有基本情况。递归不是这样工作的。您将收到一个 stackoverflowException(哈哈,这很有趣,因为我们在 StackOverFlow)。请改用此代码:

public void search(string key)
{
searchHelper(key, root); // root node will be in Tree.java
}

public void searchHelper(string key, TreeNode current)
{
if(current == null)
{
System.out.println("\nCant find !");
return;
}
if(key.compareTo(current.idct.getICode()) < 0 )
searchHelper(key, current.left);
else if(key.compareTo(current.idct.getICode()) > 0)
searchHelper(key,current.right);
else
System.out.println("\n"+current.idct + "Found \n");
}

关于java - 字符串的二叉搜索树(BST)搜索方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56632748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com