#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef struct node{
char data;
node * lchild;
node * rchild;
}BTree;
typedef struct{
BTree * data[MAXSIZE];
int top;
}SeqStack;
BTree * create(BTree * p){
char ch;
scanf("%c",&ch);
if(ch != ' '){
p = (BTree *)malloc(sizeof(BTree));
p->data = ch;
p->lchild = create(p->lchild);
p->rchild = create(p->rchild);
return p;
}else{
return NULL;
}
}
void preorder(BTree * p,SeqStack * s){
while(p != NULL || s->top > -1){
if(p!=NULL){
s->top++;
printf("%4c",p->data);
s->data[s->top] = p;
p = p->lchild;
}else{
p = s->data[s->top];
s->top--;
p = p->rchild;
}
}
}
void inorder(BTree * p,SeqStack * s){
while(p != NULL || s->top != -1){
while(p!=NULL){
s->top++;
s->data[s->top] = p;
p = p->lchild;
}
if(s->top != -1){
p = s->data[s->top];
printf("%4c",p->data);
s->top--;
p = p->rchild;
}
}
}
void postorder(BTree * p,SeqStack * s){
BTree * visited = NULL;
while(p != NULL || s->top > -1){
while(p != NULL){
s->top++;
s->data[s->top] = p;
p = p->lchild;
}
p = s->data[s->top];
if(p->rchild == NULL || p->rchild == visited){
printf("%4c",p->data);
visited = p;
s->top--;
p = NULL;
}else{
p = p->rchild;
}
}
}
int main(){
SeqStack * s = (SeqStack *)malloc(sizeof(SeqStack));
s->top = -1;
BTree * p;
p = create(p);
printf("preorder:\n");
preorder(p,s);
printf("\n");
printf("inorder:\n");
inorder(p,s);
printf("\n");
printf("postorder:\n");
postorder(p,s);
printf("\n");
return 0;
}
二叉树的基本操作(非递归)
最新推荐文章于 2019-05-10 16:59:55 发布