Saya memiliki program yang perlu saya bangun di mana saya terus menambahkan ke Pohon Pencarian Biner (BST) dengan membuka file dan menambahkan kata-kata dari file ke BST. Saya telah menemukan cara membuka file dan menyimpan kata-kata dari file asli di pohon, tetapi ketika saya mencoba membuka file kedua untuk terus menambahkan ke pohon, itu hanya bertindak seolah-olah saya mulai dari awal. Bagaimana cara menunjuk ke node berikutnya yang tersedia sehingga saya dapat terus memasukkan ke dalamnya.

Saya telah mencoba menggunakan fungsi insert saya, tetapi itu hanya bertindak seolah-olah saya memulai dari awal dan menghapus semuanya dari file sebelumnya.

Kelas simpul saya:

class BSTNode {
    String word;
    int data;
    BSTNode parent;
    BSTNode left;
    BSTNode right;


    public BSTNode(String word, int data) {
        this.word = word;
        this.data = data;
        this.left = null;
        this.right = null;
        this.parent = null;
    }


    public BSTNode() {
    }
}

Fungsi sisipan saya:

  void insert(BSTNode node, String word, int data) {
        if (search(node, word)) {
        } else {
            insertNode(node, word, data);
        }
    }

Dan tombol yang saya pilih untuk menambahkan file lain ke BST:

} else if (evt.getSource().equals(anotherFile)) {
                JFileChooser pickFile = new JFileChooser();
                int dialog = pickFile.showOpenDialog(GUI.this);
                if (dialog == JFileChooser.APPROVE_OPTION) {
                    GUI.this.file.setText(pickFile.getSelectedFile().getName());
                    directory.setText(pickFile.getCurrentDirectory().toString());
                }
                if (dialog == JFileChooser.CANCEL_OPTION) {
                    GUI.this.file.setText("You pressed cancel");
                    directory.setText("");
                }
                try {
                    Scanner scanner = new Scanner(file);
                    BSTFunctions bstf = new BSTFunctions();
                    while (scanner.hasNext()) {
                        bstf.insert(bstf.ROOT, scanner.next().toLowerCase().trim(), 1);
                    }

                    bstf.wordCount(bstf.ROOT);
                    bstf.listInOrder(bstf.ROOT);

                    scanner.close();
                } catch (IOException e1) {

                    results.append("\n\u2022YOU MUST SELECT A FILE TO CONTINUE");
                }
0
ryan williams 12 Agustus 2019, 18:08

1 menjawab

Jawaban Terbaik

Jadikan BSTFunctions bstf = new BSTFunctions(); bidang kelas GUI Anda alih-alih mendeklarasikannya di dalam actionPerformed. Jika Anda mendeklarasikannya di dalam metode, Anda akan memulai yang baru dari awal setiap kali metode itu berjalan.

class GUI extends JFrame {
    private final BSTFunctions bstf = new BSTFunctions();
    // everything else
}
0
Leo Aso 12 Agustus 2019, 17:47