二叉树的非递归遍历
来源:互联网 发布:万网解析域名设置 编辑:程序博客网 时间:2024/06/08 15:10
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序遍历、中序遍历以及后序遍历三种遍历方法。对于树的遍历若采用非递归的方法,就要采用栈和队列加以实现。
简单定义
#include<stdio.h>#include<malloc.h>#define MAX_STRING_SIZE 10240typedef 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;}
运行结果
希望对你们能有所帮助。
0 0
- 二叉树的递归,非递归遍历
- 二叉树的递归+非递归遍历
- 二叉树的递归非递归遍历
- 二叉树的遍历--递归+非递归
- 二叉树的递归、非递归遍历
- 二叉树的递归非递归遍历
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的创建,递归遍历,非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的非递归遍历以及递归遍历
- 二叉树的非递归遍历&递归遍历
- 二叉树的递归遍历和非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历和非递归遍历
- 二叉树的构造,递归遍历,非递归遍历
- 二叉树的遍历(递归+非递归+层次遍历)
- 二叉树的递归遍历与非递归遍历
- 14ava语法回顾之inputsteam&&outputsteam
- POJ-2356 Find a multiple(DFS,抽屉原理)
- 每天学习十分钟12之Java学习笔记
- 稀疏矩阵运算器
- 在Activity间使用Intent传递信息
- 二叉树的非递归遍历
- 驱动模块使用I2C总线范例
- 指针与自增运算----(*p)++ 与 *p++ 与 ++*p 拨开一团迷雾
- 浮点数精确到小数点后一位(java)
- 移除Win10资源管理器中OneDrive图标
- 【转】贝叶斯网络+马尔科夫毯 简介
- 什么是窗口句柄
- Win10开发:Flyout的使用及长按弹出菜单的实现
- HTML游戏—爱心鱼