如何将 BST 写入文本文件

How to write a BST to a text file

我正在尝试按排序顺序将二叉搜索树写入文本文件,我的写入方法在我的 BST class 中。当我在 Order Tranversal 中打印出 BST 时,它工作得很好。当我尝试将它写入文本文件时它可以工作,但正在写入的当前节点将 null 插入文本文件而不是节点

public void write(Node focusNode)
{
    
    try{
        // Creates a FileWriter
        FileWriter fileName = new FileWriter("Binary Search Tree.txt");

        // Creates a BufferedWriter
        BufferedWriter  bw = new BufferedWriter(fileName);
        if (focusNode != null) {
            bw.write(focusNode.leftChild+"\n"); //adds the  left node

            bw.write(focusNode+"\n");//add the current node

            bw.write(focusNode.rightChild+"\n"); // add the right node
        }
        else{
            System.out.print("Your binary search tree is empty");
        }
        bw.close();
    }   
    catch(Exception ex) {
        System.out.print("An error occured try again ");
    }
}

假设问题出在 null 打印件上,发生这种情况是因为您在打印左右子节点时没有先检查它们是否存在。

两种更正方法:在打印前添加无效检查,或者依靠递归调用为您完成。

另一个问题:

您不断打开文件并覆盖其内容! 你应该只打开它一次,然后调用一个递归函数并传递给它bw 这样所有的调用都会写入同一个文件而不会覆盖其他调用写入的内容

代码应如下所示(未测试!):

public void writeTree(Node root) {
    try {
        FileWriter fileName = new FileWriter("Binary Search Tree.txt"); 
        BufferedWriter bw = new BufferedWriter(fileName);
        write(root, bw);  
        bw.close();  
    }   
    catch(Exception ex) {
        System.out.print("An error occured try again ");
    }    
}

public void write(Node focusNode, BufferedWriter bw) {   
    if (focusNode == null) { 
        return;
    }
    write(focusNode.leftChild, bw); // calls recursively
    bw.write(focusNode+"\n");
    write(focusNode.rightChild, bw); // calls recursively
}