好了,測試通過,請采納
#include?<iostream>using?namespace?std;
typedef?char?TElemType;
const?char?space='^';
const?int?MAX_NODE_COUNT=20;
typedef?struct?BTreeNode
{
TElemType?data;
struct?BTreeNode?*left?,*right;
}*Root;
class?BTree
{
public:
Root?rt;
public:
BTree?(){rt=NULL;}
void?CreateBTree();
void?DLRTraverse();
void?LDRTraverse();
void?LRDTraverse();
int?depth(Root);
};
void?BTree::CreateBTree()
{
char?value;
cin>>value;
if?(value==space)
return;
rt=new?BTreeNode;
rt->data=value;
BTree?left,right;
left.CreateBTree();
right.CreateBTree();
rt->left=left.rt;
rt->right=right.rt;
}
void?BTree::DLRTraverse()
{
if?(rt)
{
BTree?left,right;
left.rt=rt->left;
right.rt=rt->right;
cout<<rt->data;
left.DLRTraverse();
right.DLRTraverse();
}
}
void?BTree::LDRTraverse()
{
if?(rt)
{
BTree?left,right;
left.rt=rt->left;
right.rt=rt->right;
left.LDRTraverse();
cout<<rt->data;
right.LDRTraverse();
}
}
void?BTree::LRDTraverse()
{
if?(rt)
{
BTree?left,right;
left.rt=rt->left;
right.rt=rt->right;
left.LRDTraverse();
right.LRDTraverse();
cout<<rt->data;
}
}
int?BTree::depth(Root?rt)
{
int?dep1,dep2;
if(rt==NULL)?return?0;
else
{
dep1=depth(rt->left?);
dep2=depth(rt->right?);
return?(dep1>dep2?(dep1+1):(dep2+1));
}
}
void?main()
{
BTree?T;
T.CreateBTree();
T.DLRTraverse();cout<<endl;
T.LDRTraverse();cout<<endl;
T.LRDTraverse();cout<<endl;
cout<<T.depth(T.rt);cout<<endl;
}