您的位置:首页 > 理论基础 > 数据结构算法

二叉树的非递归遍历

2016-01-09 20:12 411 查看
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序遍历、中序遍历以及后序遍历三种遍历方法。对于树的遍历若采用非递归的方法,就要采用栈和队列加以实现。

简单定义

#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;
}


运行结果



希望对你们能有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息