C++这个销毁二叉树的子函数为何无法执行?

子函数的任务是销毁一个二叉树,思路是从根节点开始找,没找到叶结点(末端结点)就一直往下走,若找到叶结点,则销毁之,然后再返回根结点开始找下一个叶结点,直到树上只剩下根结点。最后销毁根结点。
估摸着可能是是double free或者越界访问,也有可能是死循环,但我实在想不出问题出在什么地方。

void DestroyBT(Tnode *&bt)
{
    if(bt==NULL)
    {
        cout<<"fail:No such a Tree exists!"<<endl;
        return;
    }
    Tnode *t=(Tnode *)malloc(sizeof(Tnode));
    while(bt->Lchild!=NULL||bt->Rchild!=NULL)
    {
        t=bt;
        while(t->Lchild!=NULL||t->Rchild!=NULL)
        {
            if(t->Lchild!=NULL)
                t=t->Lchild;
            else if(t->Rchild!=NULL)
                t=t->Rchild;
        }
        free(t);
    }
    free(bt);
    bt=NULL;
    if(bt==NULL)
        cout<<endl<<"Successfully destroyed the Binary Tree!"<<endl;
}

t=bt;
free(t);
你这不已经把根节点free掉了,后面再执行free(bt)就报错了呀