bt是一颗二叉树,如下图所示:
要求实现如下函数:
###数据结构定义:
typedef struct node *BTree;
typedef struct node{
char data;
BTree lchild;
BTree rchild;
}TNode;
void CreateBTree(BTree &bt,string str);//创建二叉树
void DispBTree(BTree bt);//括号法输出二叉树
void PreOrder( BTree bt );//先序遍历二叉树
void InOrder(BTree bt);//中序遍历二叉树
void PostOrder(BTree bt);//后序遍历二叉树
void LevelOrder(BTree bt);//层次遍历二叉树
其中 BTree
表示二叉树类型。 str
是传入的字符串 ,类型为 C++
中 string
类。
#include
#include
#include
#include
using namespace std;
typedef struct node *BTree;
typedef struct node{
char data;
BTree lchild;
BTree rchild;
}TNode;
void CreateBTree(BTree &bt,string str);//创建二叉树
void DispBTree(BTree bt);//括号法输出二叉树
void PreOrder( BTree bt );//先序遍历二叉树
void InOrder(BTree bt);//中序遍历二叉树
void PostOrder(BTree bt);//后序遍历二叉树
void LevelOrder(BTree bt);//层次遍历二叉树
int flag=0;
int main()
{
string str;
BTree bt,p;
str="A(B(D,F(E)),C(G(,H),I))";
CreateBTree(bt,str);
cout<<"btree:";
DispBTree(bt);
cout<
###输出说明:
btree:A(B(D,F(E)),C(G(,H),I))
preorder:A B D F E C G H I
inorder:D B E F A G H C I
postorder:D E F B H G I C A
levelorder:A B C D F G I E H
c++实现:
int t1,t2,t3,t4;
void CreateBTree(BTree &bt,string str){
stack s;
int k, i=0;
BTree t;
bt=NULL;
char ch=str[i];
while (idata = ch;
t->lchild = t->rchild = NULL;
if (bt == NULL) bt=t;
else{
switch (k){
case 1:s.top()->lchild = t; break;
case 2:s.top()->rchild = t; break;
}
}
}
i++;
ch = str[i];
}
}
void DispBTree(BTree bt){
if(bt){
printf("%c",bt->data);
if(bt->lchild || bt->rchild)
{
printf("(");
DispBTree(bt->lchild);
if(bt->rchild) printf(",");
DispBTree(bt->rchild);
printf(")");
}
}
}
void PreOrder( BTree bt ){
if(bt){
if (t1++ == 0) printf("%c",bt->data);
else printf(" %c",bt->data);
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
void InOrder(BTree bt){
if(bt){
InOrder(bt->lchild);
if (t2++ == 0) printf("%c",bt->data);
else printf(" %c",bt->data);
InOrder(bt->rchild);
}
}
void PostOrder(BTree bt){
if(bt){
PostOrder(bt->lchild);
PostOrder(bt->rchild);
if (t3++ == 0) printf("%c",bt->data);
else printf(" %c",bt->data);
}
}
void LevelOrder(BTree bt){
queue q;
BTree t;
if(!bt) return;
q.push(bt);
while(!q.empty()){
t=q.front();
q.pop();
if (t4++ == 0) printf("%c",t->data);
else printf(" %c",t->data);
if(t->lchild) q.push(t->lchild);
if(t->rchild) q.push(t->rchild);
}
}