算法思想:简单的递归删除。
#include<iostream>
using namespace std;
typedef struct TreeNode
{
char data;
struct TreeNode *lchild,*rchild;
}TreeNode,*tree;
void build(tree &t)
{
char ch;
ch=getchar();
if(ch=='#') t=NULL;
else
{
t=(TreeNode*)malloc(sizeof(TreeNode));
t->data=ch;
t->lchild=NULL;
t->rchild=NULL;
build(t->lchild);
build(t->rchild);
}
}//建树
void del_T(tree &t){//递归删除该节点的每一个左子树和右子树
if(t){
del_T(t->lchild);
del_T(t->rchild);
free(t);
t=NULL;
}
}//递归删除结点和其子树,最后手动令其为NULL
void deletex(tree &t,int x){
if(t){
if(t->data==x){
del_T(t);
t=NULL;
}
else{
deletex(t->lchild,x);
deletex(t->rchild,x);
}
}
return ;
}//递归删除值为X的根子树
void disp(tree t)
{
if(t){
disp(t->lchild);
cout<<t->data<<" ";
disp(t->rchild);
}
}//递归中序遍历
int main(){
tree t;
build(t);
deletex(t,'B');
disp(t);
}
输入:ABD##E##CF##G##
输出:A C F G