二叉树深度优先遍历的非递归算法
2011-09-04 23:49
253 查看
void PreOrder(BiTree T)
{ // 基于方法一,流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S))
{
while ( T != NULL )
{
Visit(T->data) ;
Push(S,T);
T = T->lchild;
}
if( !StackEmpty(S) )
{
Pop(S,T);
T = T->rchild;
}
}
}
void InOrder(BiTree T)
{ // 流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S) )
{
while ( T != NULL )
{
Push(S,T);
T = T->lchild;
}
if( !StackEmpty(S) )
{
Pop(S, T);
Visit(T->data);
T = T->rchild;
}
}
}
void PostOrder(BiTree T)
{ // 流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S) )
{
while ( T != NULL )
{
Push(S,T,0);
T = T->lchild;
}
while ( !StackEmpty(S) && GetTopTag(S)==1)
{
Pop(S, T);
Visit(T->data);
}
if ( !StackEmpty(S) )
{
SetTopTag(S, 1); // 设置栈顶标记
T = GetTopPointer(S); // 取栈顶保存的指针
T = T->rchild;
}
else
break;
}
}
{ // 基于方法一,流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S))
{
while ( T != NULL )
{
Visit(T->data) ;
Push(S,T);
T = T->lchild;
}
if( !StackEmpty(S) )
{
Pop(S,T);
T = T->rchild;
}
}
}
void InOrder(BiTree T)
{ // 流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S) )
{
while ( T != NULL )
{
Push(S,T);
T = T->lchild;
}
if( !StackEmpty(S) )
{
Pop(S, T);
Visit(T->data);
T = T->rchild;
}
}
}
void PostOrder(BiTree T)
{ // 流程图如右,当型循环
InitStack(S);
while ( T!=NULL || !StackEmpty(S) )
{
while ( T != NULL )
{
Push(S,T,0);
T = T->lchild;
}
while ( !StackEmpty(S) && GetTopTag(S)==1)
{
Pop(S, T);
Visit(T->data);
}
if ( !StackEmpty(S) )
{
SetTopTag(S, 1); // 设置栈顶标记
T = GetTopPointer(S); // 取栈顶保存的指针
T = T->rchild;
}
else
break;
}
}
相关文章推荐
- 无向图的邻接矩阵,深度优先遍历和广度优先遍历的递归与非递归算法
- leetcode_337. House Robber III 大盗抢劫,房子是二叉树形式,深度优先遍历
- 二叉树深度优先遍历、广度优先遍历、非递归遍历算法
- 二叉树深度优先和广度优先遍历
- leetcode 662. Maximum Width of Binary Tree 二叉树最大宽度 + 深度优先遍历DFS
- C语言 二叉树按层打印、深度优先遍历、二叉树是否对称
- 二叉树的深度优先和广度优先遍历
- 某研究院的二叉树深度优先遍历变种的算法面试题以及答案
- 二叉树的递归,非递归遍历,深度优先遍历,广度优先遍历
- 二叉树的深度优先和广度优先遍历
- 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
- java 实现二叉树深度优先遍历的 前、中、后序遍历(递归)
- PHP 二叉树的深度优先与广度优先遍历
- 数据结构-二叉树的深度优先和广度优先遍历
- 二叉树的深度优先递归、非递归遍历、广度优先遍历 实例
- 【概念】【二叉树】深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先dfs遍历(前序、中序和后序;递归与非递归)
- leetcode 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化 + 深度优先遍历DFS
- leetcode 655. Print Binary Tree 矩形打印二叉树 + 深度优先遍历DFS
- 二叉树的遍历(深度优先)