//以下是头文件 BTree.h
struct BTreeNode{
ElemType data;
BTreeNode* left;
BTreeNode* right;
};
void InitBTree(BTreeNode* &BT )
{
BT=NULL;
}
void CreateBTree(BTreeNode* &BT ,char* a)
{
BTreeNode* s[10];
int top=-1;
BT=NULL;
BTreeNode *p;
int k;
istrstream ins(a);
char ch;
ins >>ch;
while(ch!='@')
{
switch(ch)
{
case '(':
top++;s[top]=p;k=1;
break;
case')':
top--;
break;
case',':
k=2;
break;
default:
p=new BTreeNode;
p->data=ch;p->left=p->right=NULL;
if(BT==NULL)
BT=p;
else{
switch(k)
{
case 1:
s[top]->left=p;
break;
case 2:
s[top]->right=p;
}
}
}
ins>>ch;
}
}
int BTreeEmpty(BTreeNode* BT)
{
return BT==NULL;
}
void Preorder(BTreeNode* BT)//前序遍历
{
if(BT!=NULL){
cout < <BT- > data < <' ';
Preorder (BT- > left);
Preorder(BT->right);
}
}
void Inorder(BTreeNode* BT)//中序遍历
{
if(BT!=NULL){
Inorder(BT->left);
cout < <BT- > data < <' ';
Inorder (BT- > right);
}
}
void Postorder(BTreeNode* BT)//后序遍历
{
if(BT!=NULL){
Postorder(BT->left);
Postorder(BT->right);
cout < <BT- > data < <' ';
}
}
void Levelorder(BTreeNode* BT)
{
BTreeNode* q[30];
int front =0,rear=0;
BTreeNode* p;
if(BT! =NULL){
rear =(rear+1)%30;
q[rear] =BT;
}
while(front! =rear)
{
front =(front+1)%30;
p =q[front];
cout<<p- > data < <' ';
if (p- > left!=NULL){
rear=(rear+1)%30;
q[rear]=p->left;
}
if(p->right!=NULL)
{
rear=(rear+1)%30;
q[rear]=p->right;
}
}
}
BTreeDepth(BTreeNode* BT)
{
if(BT==NULL)
return 0;
else
{
int dep1=BTreeDepth(BT->left);
int dep2=BTreeDepth(BT->right);
if(dep1>dep2)
return dep1+1;
else
return dep2+1;
}
}
void PrintBTree(BTreeNode* BT)
{
if(BT!=NULL)
{
cout < <BT- > data;
if(BT->left!=NULL||BT->right!=NULL)
{
cout < <'(';
PrintBTree (BT- > left);
if(BT->right!=NULL)
cout < <',';
PrintBTree (BT- > right);
cout < <')';
}
}
}
void DeleteBTree(BTreeNode* BT)
{
if(BT! =NULL)
{
DeleteBTree(BT- > left);
DeleteBTree(BT->right);
delete BT;
}
}
void ClearBTree(BTreeNode* &BT )
{
DeleteBTree(BT);
BT=NULL;
}
//以下是源文件部分
#include < iostream .h >
#include < conio .h >
#include < stdlib .h >
#include < strstrea .h >
typedef char ElemType;
#include"BTree.h"
void main()
{
BTreeNode* bt;
InitBTree(bt);
char b[50];
cout < <"输入以'@'字符作为结束符的二叉树广义表表示: "<<endl;
cin.getline(b,sizeof(b));
CreateBTree(bt,b);
PrintBTree(bt);
cout<<endl;
cout<<"前序:";
Preorder(bt);cout<<endl;
cout<<"中序:";
Inorder(bt);cout<<endl;
cout<<"后序:";
Postorder(bt);cout<<endl;
cout<<"按层:";
Levelorder(bt);cout<<endl;
cout<<"二叉树的深度为:";
cout<<BTreeDepth(bt)<<endl;
ClearBTree(bt);
getch();
}
struct BTreeNode{
ElemType data;
BTreeNode* left;
BTreeNode* right;
};
void InitBTree(BTreeNode* &BT )
{
BT=NULL;
}
void CreateBTree(BTreeNode* &BT ,char* a)
{
BTreeNode* s[10];
int top=-1;
BT=NULL;
BTreeNode *p;
int k;
istrstream ins(a);
char ch;
ins >>ch;
while(ch!='@')
{
switch(ch)
{
case '(':
top++;s[top]=p;k=1;
break;
case')':
top--;
break;
case',':
k=2;
break;
default:
p=new BTreeNode;
p->data=ch;p->left=p->right=NULL;
if(BT==NULL)
BT=p;
else{
switch(k)
{
case 1:
s[top]->left=p;
break;
case 2:
s[top]->right=p;
}
}
}
ins>>ch;
}
}
int BTreeEmpty(BTreeNode* BT)
{
return BT==NULL;
}
void Preorder(BTreeNode* BT)//前序遍历
{
if(BT!=NULL){
cout < <BT- > data < <' ';
Preorder (BT- > left);
Preorder(BT->right);
}
}
void Inorder(BTreeNode* BT)//中序遍历
{
if(BT!=NULL){
Inorder(BT->left);
cout < <BT- > data < <' ';
Inorder (BT- > right);
}
}
void Postorder(BTreeNode* BT)//后序遍历
{
if(BT!=NULL){
Postorder(BT->left);
Postorder(BT->right);
cout < <BT- > data < <' ';
}
}
void Levelorder(BTreeNode* BT)
{
BTreeNode* q[30];
int front =0,rear=0;
BTreeNode* p;
if(BT! =NULL){
rear =(rear+1)%30;
q[rear] =BT;
}
while(front! =rear)
{
front =(front+1)%30;
p =q[front];
cout<<p- > data < <' ';
if (p- > left!=NULL){
rear=(rear+1)%30;
q[rear]=p->left;
}
if(p->right!=NULL)
{
rear=(rear+1)%30;
q[rear]=p->right;
}
}
}
BTreeDepth(BTreeNode* BT)
{
if(BT==NULL)
return 0;
else
{
int dep1=BTreeDepth(BT->left);
int dep2=BTreeDepth(BT->right);
if(dep1>dep2)
return dep1+1;
else
return dep2+1;
}
}
void PrintBTree(BTreeNode* BT)
{
if(BT!=NULL)
{
cout < <BT- > data;
if(BT->left!=NULL||BT->right!=NULL)
{
cout < <'(';
PrintBTree (BT- > left);
if(BT->right!=NULL)
cout < <',';
PrintBTree (BT- > right);
cout < <')';
}
}
}
void DeleteBTree(BTreeNode* BT)
{
if(BT! =NULL)
{
DeleteBTree(BT- > left);
DeleteBTree(BT->right);
delete BT;
}
}
void ClearBTree(BTreeNode* &BT )
{
DeleteBTree(BT);
BT=NULL;
}
//以下是源文件部分
#include < iostream .h >
#include < conio .h >
#include < stdlib .h >
#include < strstrea .h >
typedef char ElemType;
#include"BTree.h"
void main()
{
BTreeNode* bt;
InitBTree(bt);
char b[50];
cout < <"输入以'@'字符作为结束符的二叉树广义表表示: "<<endl;
cin.getline(b,sizeof(b));
CreateBTree(bt,b);
PrintBTree(bt);
cout<<endl;
cout<<"前序:";
Preorder(bt);cout<<endl;
cout<<"中序:";
Inorder(bt);cout<<endl;
cout<<"后序:";
Postorder(bt);cout<<endl;
cout<<"按层:";
Levelorder(bt);cout<<endl;
cout<<"二叉树的深度为:";
cout<<BTreeDepth(bt)<<endl;
ClearBTree(bt);
getch();
}
QQ群:
34409541 讨论网页
34409326 讨论JAVA 已满
34408784 讨论VC++
34409699 讨论VC++
9143041 讨论MFC编程
10614204 讨论C#
10613030 讨论Win32编程
10613067 讨论游戏开发
18779860 讨论JAVA
*/
34409541 讨论网页
34409326 讨论JAVA 已满
34408784 讨论VC++
34409699 讨论VC++
9143041 讨论MFC编程
10614204 讨论C#
10613030 讨论Win32编程
10613067 讨论游戏开发
18779860 讨论JAVA
*/