二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序遍历、中序遍历以及后序遍历三种遍历方法。对于树的遍历若采用非递归的方法,就要采用栈和队列加以实现。
简单定义
#include<stdio.h>
#include<malloc.h>
#define MAX_STRING_SIZE 10240
typedef struct BTNode{
char data;
struct BTNode *lchild,*rchild;
}BTNode, *BiTree;
int x;
创建树
BiTree CreateTree(char s[]){
BiTree T;
char ch=s[x++];
if(ch=='\0'){
return NULL;
}
if(ch=='#'){
return NULL;
}
T=(BiTree)malloc(sizeof(struct BTNode));
T->data=ch;
T->lchild=CreateTree(s);
T->rchild=CreateTree(s);
return T;
}
中序非递归
void InOrder(BiTree T){
BiTree stack[MAX_STRING_SIZE];
int top=-1;
if(!T){
return;
}
while(true){
while(T){
stack[++top]=T;
T=T->lchild;
}
if(top<0){
break;
}
T=stack[top--];
printf("%c",T->data);
T=T->rchild;
}
}
中序非递归
void InOrder(BiTree T){
BiTree stack[MAX_STRING_SIZE];
int top=-1;
if(!T){
return;
}
while(true){
while(T){
stack[++top]=T;
T=T->lchild;
}
if(top<0){
break;
}
T=stack[top--];
printf("%c",T->data);
T=T->rchild;
}
}
层次遍历
void LevelOrder(BiTree T){
BiTree que[MAX_STRING_SIZE];
int font, rear;
font=rear=-1;
if(!T){
return;
}
que[++rear]=T;
while(font<rear){
T=que[++font];
printf("%c",T->data);
if(T->lchild){
que[++rear]=T->lchild;
}
if(T->rchild){
que[++rear]=T->rchild;
}
}
}
主函数
int main(){
char s[MAX_STRING_SIZE];
x=0;
scanf("%s",s);
BiTree T=CreateTree(s);
InOrder(T);
printf("\n");
LevelOrder(T);
return 0;
}
运行结果
希望对你们能有所帮助。