1

我目前正在学习数据结构入门课程,并且正在努力解决我们关于二叉搜索树的问题之一。这是我第一次实现这种数据结构,并且正在努力学习它。

问题:该程序应该根据当年出生的婴儿的人口普查数据创建和搜索名称和发生数据的 BST。我们在一个 txt 文件中获得了这些数据。

我很难弄清楚为什么它不起作用。我真的只是在寻找一个人来引导我从这里朝着正确的方向前进,并就我已经拥有的东西给我一些好的反馈,因为我真的很迷茫!我目前的工作如下。我在java中实现这个。提前致谢!

public class Node {
String name; 
int data;

Node leftChild;
Node rightChild; 

public Node (String n, int d) {
    name = n;
    data = d;
}


public class BinarySearchTree` {

public static Node root;

public void addNode(String name, int data) {
    Node newNode = new Node(name, data);

    if (root == null) {
        root = newNode;
    } else {
        Node focusNode = root;

        Node parent; 

        while(true) {
            parent = focusNode;
            if (name.compareTo(focusNode.name) < 0) {   
                focusNode = focusNode.leftChild; 
                if (focusNode == null) {
                    parent.leftChild = newNode;
                    return;
                } else {
                    focusNode = focusNode.rightChild;
                    if (focusNode == null) { 
                        parent.rightChild = newNode; 
                        return;
                    }
                }
            }
        }
    }
}

public Node searchName(String name) {
    Node focusNode = root;

    while (!focusNode.name.equals(name)) {
        if (name.compareTo(focusNode.name) < 0) {
            focusNode = focusNode.leftChild;
        } else {
            focusNode = focusNode.rightChild;
        }
        if (focusNode == null) {
            return null;
        }
    }
    return focusNode;
}

public static void main(String[] args) throws Exception {
    BinarySearchTree tree = new BinarySearchTree();

    FileReader file = new FileReader("/Users/mattspahr/Desktop/test.txt");
    BufferedReader reader = new BufferedReader(file);

    String  str = null, 
            name = null, 
            num = null;

    int     data;

    while(reader.readLine() != null) {
        str = reader.readLine();

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c >= '0' || c <= '9') {
                name = str.substring(0, i);
            }
            num = str.replaceAll("[^0-9]" , "");
        }

        data = Integer.parseInt(num);

        tree.addNode(name,data);

        Node n = tree.searchName("Buffy  ");

        System.out.println(n);
    }
}   

}

4

0 回答 0