//树的操作
#include<malloc.h>
#include<iostream>
#include<string>
#define MAXN 100
using namespace std;
typedef struct node
{
char data;
struct node *left,*right;
}BTree;
int create_tree(BTree *&b,string str)
{
b=NULL;
BTree *p;
int k; //k表示左或右孩子树
char c;
int top=-1;
BTree *stack[MAXN];
int j=0;
c=str[j];
while(c!='/0')
{
switch(c)
{
case '(':top++;k=1;stack[top]=p;break;
case ',':k=2;break;
case ')':top--;break;
default:
p=(BTree *)malloc(sizeof(BTree));
p->left=p->right=NULL;
p->data=str[j];
if(b==NULL)
{
b=p;
}
else
{
switch(k)
{
case 1:stack[top]->left=p;break;
case 2:stack[top]->right=p;break;
}
}
}
j++;
c=str[j];
}
return 1;
}
void inorder(BTree *b)
{
if(b!=NULL)
{
inorder(b->left);
cout<<b->data<<" ";
inorder(b->right);
}
}
void porder(BTree *b)
{
BTree *stack[MAXN],*p;
int top;
if(b!=NULL)
{
top=1;
stack[top]=b;
while(top>0)
{
p=stack[top];
top--;
cout<<p->data<<" ";
if(p->right!=NULL)
{
top++;
stack[top]=p->right;
}
if(p->left!=NULL)
{
top++;
stack[top]=p->left;
}
}
}
}
void inorder_s(BTree *b)
{
BTree *stack[MAXN];
int top=-1;
if(b!=NULL)
{
while(b->left!=NULL)
{
top++;
stack[top]=b->left;
b=b->left;
}
while(top>=0)
{
cout<<stack[top]->data<<" ";
top--;
}
while(b->right!=NULL)
{
top++;
stack[top]=b->right;
b=b->right;
}
while(top>=0)
{
cout<<stack[top]->data<<" ";
top--;
}
}
}
void postorder(BTree *b)
{
if(b!=NULL)
{
postorder(b->left);
postorder(b->right);
cout<<b->data<<" ";
}
}
int main()
{
BTree *b;
create_tree(b,"a(b(c),d(e(,f),g))");
inorder(b);
cout<<endl;
postorder(b);
cout<<endl;
inorder_s(b);
cout<<endl;
porder(b);
cout<<endl;
return 0;
}
今天早上写的二叉树的建立及遍历
最新推荐文章于 2022-04-03 10:07:13 发布