return0;
}
return1;
}
CBTree*BTreeLeft(CBTree*bt)
{
if(bt)
returnbt->left;
else
returnNULL;
}
CBTree*BTreeright(CBTree*bt)
{
if(bt)
returnbt->right;
else
returnNULL;
}
intBTreeIsempty(CBTree*bt)
{
if(bt)
return0;
else
return1;
}
intBTreeDepth(CBTree*bt)
{
intdep1,dep2;
if(bt==NULL)
return0;
else
{
dep1=BTreeDepth(bt->left);
dep2=BTreeDepth(bt->right);
if(dep1>dep2)
returndep1+1;
else
returndep2+1;
}
}
CBTree*BTreeFind(CBTree*bt,chardata)
{
CBTree*p;
if(bt==NULL)
returnNULL;
else
{
if(bt->data==data)
returnbt;
else
{
if(p=BTreeFind(bt->left,data))
returnp;
elseif(p=BTreeFind(bt->right,data))
returnp;
else
returnNULL;
}
}
}
voidBTreeClear(CBTree*bt)
{
if(bt)
{
BTreeClear(bt->left);
BTreeClear(bt->right);
free(bt);
bt=NULL;
}
return;
}
voidBTree_pre(CBTree*bt)
{
if(bt)
{
cout<data<<"";
BTree_pre(bt->left);
BTree_pre(bt->right);
}
return;
}
voidBTree_mid(CBTree*bt)
{
if(bt)
{
BTree_mid(bt->left);
cout<data<<"";
BTree_mid(bt->right);
}
return;
}
voidBTree_post(CBTree*bt)
{
if(bt)
{
BTree_post(bt->left);
BTree_post(bt->right);
cout<data<<"";
}
return;
}
voidBTree_level(CBTree*bt)
{
CBTree*p,*q[QUEUE_MAXSIZE];
inthead=0,tail=0;
if(bt)
{
tail=(tail+1)%QUEUE_MAXSIZE;
q[tail]=bt;
}
while(head!
=tail)
{
head=(head+1)%QUEUE_MAXSIZE;
p=q[head];
cout<data<<"";
if(p->left!
=NULL)
{
tail=(tail+1)%QUEUE_MAXSIZE;
q[tail]=p->left;
}
if(p->right!
=NULL)
{
tail=(tail+1)%QUEUE_MAXSIZE;
q[tail]=p->right;
}
}
return;
}
CBTree*InitRoot()
{
CBTree*node;
if(node=(CBTree*)malloc(sizeof(CBTree)))
{
cout<<"inputtheroot:
";
cin>>node->data;
node->left=NULL;
node->right=NULL;
returnnode;
}
returnNULL;
}
voidAddNode(CBTree*bt)
{
CBTree*node,*parent;
chardata,select;
if(node=(CBTree*)malloc(sizeof(CBTree)))
{
cout<<"pleaseinputthedata:
";
cin>>node->data;
node->left=NULL;
node->right=NULL;
cout<<"pleaseinputtheparent:
";
cin>>data;
parent=BTreeFind(bt,data);
if(!
parent)
{
cout<<"noparent."<free(node);
return;
}
cout<<"1.toleft;2.toright";
do
{
cin>>select;
select=select-'0';
if(select==1||select==2)
BTreeAddNode(parent,node,select);
}while(select!
=1&&select!
=2);
}
return;
}
主函数调用为:
intmain()
{
CBTree*root=NULL;
charselect;
do
{
cout<<"1.setroot2.addnode3.pre_scan"<cout<<"4.min_scan5.post_scan6.level_scan"<cout<<"7.thedepth0.exit"<cin>>select;
switch(select)
{
case'1':
root=InitRoot();
break;
case'2':
AddNode(root);
break;
case'3':
cout<<"thepre_scanis:
";
BTree_pre(root);
cout<break;
case'4':
cout<<"themid_scanis:
";
BTree_mid(root);
cout<break;
case'5':
cout<<"thepost_scanis:
";
BTree_post(root);
cout<break;
case'6':
cout<<"thelevel_scanis:
";
BTree_level(root);
cout<break;
case'7':
cout<<"thedepthis"<break;
case'0':
break;
}
}while(select!
='0');
BTreeClear(root);
root=NULL;
return0;
}
实例程序: