1、编写递归算法,对于二叉树中每一个元素值为 x 的结点,删去以它为根的子树,并释放相应的空间。解答 多种方法:(5 种)1:Status Del-subtree(Bitree bt)/删除 bt 所指二叉树,并释放相应的空间if (bt) Del-subtree(bt-lchild);Del-subtree(bt-rchild);free(bt);return OK;/Del-subtreeStatus Search-del(Bitree bt, TelemType x)/在 bt 所指的二叉树中,查找所有元素值为 x 的结点,并删除以它为根的子树if (bt)if (bt-data=x) De
2、l-subtree(bt);else Search-Del(bt-lchild, x);Search-Del(bt-rchild, x);return OK;/Search-Del2:编写递归算法,对于二叉树中每一个元素值为 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);elseif(T-lchild) Del_Sub_x(T-lchild,x);i
3、f(T-rchild) Del_Sub_x(T-rchild,x);3编写递归算法:对于二叉树中每一个元素值为 x 的结点,删去以它为根的子树,并释放相应的空间。提示 :(1 )按先序查找;(2)超前查看子结点(3)按后序释放;void DelSubTree(BiTree *bt, DataType x) if ( *bt != NULL *bt =NULL;else DelTree( *bt, x)void DelTree(BiTree bt, DataType x) if ( bt ) if (bt-LChild bt-LChild=NULL;if (bt-RChild bt-RChild
4、=NULL;DelTree(bt-LChild, x);DelTree(bt-RChild, x);4:/结点定义templateclass BstTree;templateclass BstNode friend class BstTree;private:int Level;T data;BstNode* LeftPtr;BstNode* RightPtr;public:BstNode(const TLeftPtr=left;RightPtr=right;Level=lev;/释放子树空间,注意传递一个二维指针(即 searchTree 函数返回的结点的地址) ,即指针的地址,以此来释放空
5、间templatevoid BstTree:releaseHelper(BstNode* root)if(*(root)!=0)BstNode* tempt=(*root);releaseHelper(releaseHelper(coutdataBstNode* BstTree:serchTree(const Tbool found=false;for(; ;)if(found | tempt=0) break;if(valuedata)tempt=tempt-LeftPtr;else if(valuetempt-data)tempt=tempt-RightPtr;elsefound=true;if(found)return tempt;/查找到要删除子树的根节点elsereturn NULL;/否则返回 NULL