我删除一棵树的所有节点后,发现有些内存依然没有释放。树的所有节点都是InsertItem函数放进去的,删除使用了DeleteAllItems函数,请各位大侠告诉我原因和解决方法,谢谢,不胜感激。

解决方案 »

  1.   

    删除所有的节点,其实就是一个遍历的过程。那么就看看你用哪种遍历了,如果用了先序遍历,那么根节点就会被首先删除,它的左、右子树就找不到了。
    中序遍历,首先删除左子树,然后是根节点,那么他相应的右子树就会被保留。
    只有后序遍历才可以。可以用递归。
    伪代码如下:
    void DeleteAllItems(boot)
    {
        if(boot->leftchild!=NULL)  DeleteAllItems(boot->leftchild) ;
        if(boot->rightchild!=NULL) DeleteAllItems(boot->rightchild);
        free(boot);
    }