编写递归算法,对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释

发布时间:2024-11-21

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

编写递归算法,对于二叉树中每一个元素值为x的结点,删去以它为

根的子树,并释放相应的空间。

[解答]多种方法:(5种)

1:

Status Del-subtree(Bitree bt){

//删除bt所指二叉树,并释放相应的空间

if (bt) {

Del-subtree(bt->lchild);

Del-subtree(bt->rchild);

free(bt);

}

return OK;

}//Del-subtree

Status Search-del(Bitree bt, TelemType x){

//在bt所指的二叉树中,查找所有元素值为x的结点,并删除以它为根的子树

if (bt){

if (bt->data=x) Del-subtree(bt);

else {

Search-Del(bt->lchild, x);

Search-Del(bt->rchild, x);

}

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

}

return OK;

}//Search-Del

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

void Del_Sub(BiTree T)

{ if(T->lchild) Del_Sub(T->lchild);

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

free(T);

}

void

{ if(T->data==x) Del_Sub(T);

else

{if(T->lchild) Del_Sub_x(T->lchild,x);

if(T->rchild) Del_Sub_x(T->rchild,x);

}

}

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

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

[提示]:

(1)按先序查找;(2)超前查看子结点(3)按后序释放;

void DelSubTree(BiTree *bt, DataType x)

{

if ( *bt != NULL && (*bt) ->data==x )

{ FreeTree(*bt);

*bt =NULL;

}

else DelTree( *bt, x)

void DelTree(BiTree bt, DataType x)

{ if ( bt )

{ if (bt->LChild && bt->LChild->data==x)

{ FreeTree(bt->LChild);

bt->LChild=NULL;

}

if (bt->RChild && bt->RChild->data==x)

{ FreeTree(bt->RChild);

bt->RChild=NULL;

}

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

DelTree(bt->LChild, x);

DelTree(bt->RChild, x);

}

}

4:

//结点定义

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<<" ";

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

delete tempt;

}

}

//查找要删除的子树的根结点

template<class T>

BstNode<T>* BstTree<T>::serchTree(const T& value) {

BstNode<T>* tempt=Root;

bool found=false;

for(; ;)

{

if(found || tempt==0) break;

if(value<tempt->data)

tempt=tempt->LeftPtr;

else if(value>tempt->data)

tempt=tempt->RightPtr;

else

found=true;

}

if(found)

return tempt;//查找到要删除子树的根节点 else

return NULL;//否则返回NULL

}

编写递归算法,对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219