二叉树前序、中序、后序非递归遍历实现(C语言)
2017-05-27 17:58
459 查看
一、非递归前序遍历
二、非递归中序遍历
三、非递归后序遍历
void TreversePreorder(struct BTree *T) { struct BTree *stack[1000],*p=T; int top=0; while(p||top) { if(p) { printf("%d ",p->data); stack[top++]=p; p=p->left; } else { p=stack[--top]; p=p->right; } } }
二、非递归中序遍历
void TreverseInorder(struct BTree *T) { struct BTree *stack[1000],*p=T; int top=0; while(p||top) { if(p) { stack[top++]=p; p=p->left; } else { p=stack[--top]; printf("%d ",p->data); p=p->right; } } }
三、非递归后序遍历
void TreversePostorder(struct BTree *T) { struct BTree *stack[1000],*p=T,*r=NULL; int top=0; while(p||top) { if(p) { stack[top++]=p; p=p->left; } else { p=stack[top-1]; if(p->right&&p->right!=r)//判断右子树,不为空且未被访问则需要先遍历 { p=p->right; stack[top++]=p;//当前右子树压栈 p=p->left; } else//右子树为空,则直接访问 { p=stack[--top]; printf("%d ",p->data); r=p;//r保存节点 p=NULL; } } } }
相关文章推荐
- 用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。
- C语言递归实现二叉树的先序、中序、后序遍历
- C语言非递归实现二叉树的先序、中序、后序、层序遍历
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- 用非递归实现二叉树的前序、中序、后序、层次遍历,用递归实现查找、统计个数、比较、求深度
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- ZT 二叉树先序,中序,后序遍历非递归实现
- 二叉树的前序、中序、后序遍历 递归非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 利用栈实现二叉树的先序,中序,后序遍历的非递归操作
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的遍历;前序 中序 后序遍历二叉树;递归 非递归实现; 重建二叉树;编程之美重建二叉树
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- 二叉树先序、中序、后序遍历的非递归实现