、编写递归算法,对于二叉树中每一个元素值为X的结点,删去以它为根的子树,并释放相应的空间。

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:22:15
用void ReleaseX(BiTree &bt, char x)实现
现在没有什么分,这几天登陆一下有分先。如果帮我弄出来的话,我会加分的。谢谢!

或者帮我看看哪里错了。
void ReleaseX(BiTree &bt, char x)
/* Delete all subtrees whose root is */
/* the node which element value is x, */
/* then release correspondant space. */
{

if(bt->data==x) Del_Sub(bt);

else

{

if(bt->lchild) ReleaseX(bt->lchild,x);

if(bt->rchild) ReleaseX(bt->rchild,x);

}

}

void Del_Sub(Bitree bt)
{

if(bt->lchild) Del_Sub(bt->lchild);

if(bt->rchild) Del_Sub(bt->rchild);

free(bt);

}

//结点定义
template<class T>
class BstTree;
template<class T>
class BstNode
{
friend class BstTree<T>;
private:
int Level;
T data;
BstNode<T>* LeftPtr;
BstNode<T>* RightPtr;
public:
BstNode(const T& info=0,BstNode<T>* left=0,BstNode<T>* right=0,int lev=0)
{
data=info;LeftPtr=left;RightPtr=right;Level=lev;
}
};

//释放子树空间,注意传递一个二维指针(即searchTree函数返回的结点的地址),即指针的地址,以此来释放空间
template<class T>
void BstTree<T>::releaseHelper(BstNode<T>** root)
{
if(*(root)!=0)
{
BstNode<T>* tempt=(*root);
releaseHelper(&((*root)->LeftPtr));
releaseHelper(&((*root)->RightPtr));
cout<<tempt->data<<" ";
delete tempt;
}
}

//查找要删除的子树的根结点
template<class T>
BstNode<T>* BstTree<T>::serchTree(co