二叉树的非递归遍历
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; }
运行结果
希望对你们能有所帮助。
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 文件遍历排序函数
- C#数据结构之顺序表(SeqList)实例详解
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua教程(七):数据结构详解
- 有关数据库SQL递归查询在不同数据库中的实现方法
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#中的递归APS和CPS模式详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#中遍历Hashtable的4种方法
- WinForm实现按名称递归查找控件的方法
- C#数据结构之单链表(LinkList)实例详解
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#中的尾递归与Continuation详解
- Erlang中遍历取出某个位置的最大值代码
- 数据结构之Treap详解
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析