利用栈实现的二叉树的先、中、后序遍历
2013-06-06 09:55
555 查看
利用栈实现二叉树的遍历
栈的操作参考:栈、循环队列的基本操作
先序遍历
status PreOrderbyStack(BiTree *T, void (*visit)(BiTree *T)) { stack s; BiTree *pmove; initStack(&s); pmove = T; Push(&s, T); while(!IsStackEmpty(&s)) { Pop(&s, &pmove); if(pmove == NULL) { continue; } else { visit(pmove); Push(&s, pmove->rchild); Push(&s, pmove->lchild); } } destroyStack(&s); return TRUE; }
中序遍历
status InOrderbyStack(BiTree *T, void (*visit)(BiTree *T)) { stack s; BiTree *pmove; BiTree *flag; initStack(&s); pmove = T; Push(&s, T); Push(&s, (BiTree *)1);//加入标号,表示这个节点左孩子还未访问 while(!IsStackEmpty(&s)) { Pop(&s, &flag); Pop(&s, &pmove); if((int)flag == 1) { while(pmove->lchild != NULL) { Push(&s, pmove); Push(&s, (BiTree *)0);//加入标号,表示这个节点左孩子已被访问 pmove = pmove->lchild; } } visit(pmove); if(pmove->rchild != NULL) { Push(&s, pmove->rchild); Push(&s, (BiTree *)1);//加入标号,表示这个节点左孩子还未访问 } } destroyStack(&s); return TRUE; }
后序遍历
status PostOrderbyStack(BiTree *T, void (*visit)(BiTree *T)) { stack s; BiTree *pmove; BiTree *flag; initStack(&s); pmove = T; Push(&s, T); Push(&s, (BiTree *)0);//加入标号,表示这个节点左孩子还未访问 while(!IsStackEmpty(&s)) { Pop(&s, &flag); Pop(&s, &pmove); if((int)flag == 0) { while(pmove->lchild != NULL) { Push(&s, pmove); Push(&s, (BiTree *)1);//加入标号,表示这个节点左孩子已被访问 pmove = pmove->lchild; } } if((int)flag < 2) { if(pmove->rchild != NULL) { Push(&s, pmove); Push(&s, (BiTree *)2);//加入标号,表示这个节点右孩子已被访问 pmove = pmove->rchild; Push(&s, pmove); Push(&s, (BiTree *)0);//加入标号,表示这个节点左孩子还未访问 continue; } } visit(pmove); } destroyStack(&s); return TRUE; }
相关文章推荐
- 二叉树的创建以及利用迭代实现中序、先序、后序遍历、清空
- 利用栈实现二叉树的先序,中序,后序遍历的非递归操作
- 二叉树的创建以及利用迭代实现中序、先序、后序遍历、清空
- 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)
- 树和二叉树---C语言利用栈实现二叉树的递归、非递归的前、中、后序遍历
- 二叉树:前序、中序、后序、层次遍历及实现
- 二叉树先序,中序,后序、层序遍历递归和非递归实现
- 数据结构与算法分析笔记与总结(java实现)--二叉树20:二叉搜索树的后序遍历序列
- 组合模式实现二叉树先序遍历,中序遍历和后序遍历
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 前序、中序、后序遍历二叉树的非递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的建立以及先序、中序、后序遍历C语言实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树的非递归前序、中序以及后序遍历C++模版类实现
- JAVA实现二叉树的遍历的非递归算法及递归算法(前序,中序,后序,层次)
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 分别用递归和非递归方式实现二叉树的先序、中序和后序遍历
- 利用队列实现二叉树的层次遍历
- 实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法