|
|
#2
hzh5122010-06-05 09:34
|
删除二cha树中,以data域为x的结点为根的子树
我用的递归算法,可是删除后,遍历显示删除成功,但会出现乱码,大家看看怎么回事;
代码:
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *lchild,*rchild;
}BiNode,*BiTree;
BiTree CreatBiTree()
{
BiTree T;
ElemType x;
scanf("%c",&x);
if(x=='#') T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiNode));
T->data=x;
T->lchild=CreatBiTree();
T->rchild=CreatBiTree();
}
return T;
}
void FREE(BiTree T)
{
if(T)
{
FREE(T->lchild);
FREE(T->rchild);
free(T);
}
}
void Delete(BiTree T,ElemType x)
{
if(T)
{
Delete(T->lchild,x);
Delete(T->rchild,x);
if(T->data==x)
{
FREE(T);
T=NULL;
}
}
}
void preorder(BiTree T)
{
if(T)
{
printf("%c",T->data);
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BiTree T)
{
if(T)
{
inorder(T->lchild);
printf("%c",T->data);
inorder(T->rchild);
}
}
int main()
{
BiTree T;
ElemType x;
T=CreatBiTree();
preorder(T);
printf("\n");
inorder(T);
printf("\n");
getchar();
scanf("%c",&x);
Delete(T,x);
preorder(T);
printf("\n");
inorder(T);
printf("\n");
return 0;
}
比如:abdh###e#i##cfj###g##
删除c
输出:
abdhei&*^
hdbeia&*^
后面的&*^表示乱码,共三位,每次释放空間的时候,我都设为空了啊,怎么还会出现乱码呢?
程序代码:
为什么要用二级指针呢?我还是不懂您的意思,问题真的在这儿吗?
去年才学的忘的差不多了