二叉树查找、插入、删除
# include
# include
# define datatype char
typedef struct bitnode
{ datatype data;
struct bitnode *lchild,*rchild; } BiTNode, * BiTree;
void CreateBinTree(BiTree *T) {
datatype ch;
cout<<"输入字符:"<>ch;
if(ch=='0')
*T=NULL;
else
{
(*T)=(BiTNode *)malloc(sizeof(BiTNode));
(*T)->data=ch;
CreateBinTree(&((*T)->lchild));
CreateBinTree(&((*T)->rchild));
}
}
BiTree Search(BiTree bt,datatype x) {BiTree p;
if(bt)
{
if(bt->data==x)return bt;
if(bt->lchild){p=Search(bt->lchild, x);
if(p)return p;}
if(bt->rchild){p=Search(bt->rchild, x);
if(p)return p;}
}
return NULL;
}
BiTree InsertL(BiTree bt,datatype y,BiTree parent)
{
BiTree p;
if(parent==NULL)
{cout<<"error";
return NULL;
}
if((p=(BiTNode *)malloc(sizeof(BiTNode)))==NULL)return NULL;
p->data=y;
p->lchild=NULL;
p->rchild=NULL;
if(parent->lchild==NULL)parent->lchild=p;
else{
p->lchild=parent->lchild;
parent->lchild=p;
}
return bt;
}
BiTree DeleteL(BiTree bt,BiTree parent)
{
BiTree p;
if(parent==NULL||parent->lchild==NULL)
{
cout<<"出错~~";
return NULL;
}
p=parent->lchild;
parent->lchild=NULL;
free(p);
return bt;
}
void Visit(BiTree bt) {
cout<data;
}
void PreOrder(BiTree bt) {
if (bt==NULL) return;
Visit(bt);
PreOrder(bt->lchild);
PreOrder(bt->rchild); }
void main()
{
BiTree bt,Q,W;
datatype x,y,Z;
CreateBinTree(&bt);
cout<<"先序遍历递归输出:"<>x;
Q=Search( bt, x);
cout<data<>y;
InsertL( bt, y, Q);
cout<<"先序遍历递归输出:"<>Z;
//W=Search( bt, Z);
//cout<data<