在二叉搜索树中删除所有节点并将root设置为null?

时间:2014-03-30 22:54:29

标签: java binary-search-tree

我是Java新手。当我遇到一个删除BST中所有节点的问题时,我正在练习一些编程问题。

我想在Java中实现以下程序: http://www.geeksforgeeks.org/write-a-c-program-to-delete-a-tree/

我编写了以下代码,但它只删除了BST中最左边和最右边的元素。请帮忙

public boolean isLeaf(Node n){
    return (n.lchild==null && n.rchild==null);

}
public void deleteTree(){
    deleteTree(root);
}
public void deleteTree(Node n){
    if(n==null)
        return;
    if(n.lchild!=null && isLeaf(n.lchild))
        n.lchild=null;
    else
        deleteTree(n.lchild);
    if(n.rchild!=null && isLeaf(n.rchild))
        n.rchild=null;
    else
        deleteTree(n.rchild);
}

1 个答案:

答案 0 :(得分:0)

您正在学习的教程是关于与Java有很大不同的语言C.在C中,您必须手动分配和释放内存(通过您列出的链接中的malloc和free方法)。但是,Java管理幕后的所有内容。您可以说Java的malloc版本是new。但是为了释放内存,Java有一个垃圾收集器,通过删除未引用的对象来释放内存。 要用Java“删除”你的树,你所要做的就是取消引用你的root:

public void deleteTree() {
    root = null;
}