再回首,数据结构——树的先序、中序、后序遍历的递归与非递归实现
2015-05-28 11:24
573 查看
最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
1.二叉树遍历算法的递归实现
这个较为直观,但是效率不是太高
//1.先序遍历
void PreOrder (BinTree root)
{
if (root != NULL)
{
printf ("%c", root->data); //访问根结点
PreOrder (root->lchild); //先序遍历左子树
PreOrder (root->rchild); //先序遍历右子树
}
}
//2.中序遍历
void InOrder (BinTree root)
{
if (root != NULL)
{
Inorder(root->lchild); //中序遍历左子树
printf ("%c", root->data); //访问根结点
Inorder(root->rchild); //中序遍历右子树
}
}
//3.后序遍历
void PostOrder (BinTree root)
{
if (root != NULL)
{
PostOrder(root->lchild); //后序遍历左子树
PostOrder(root->rchild); //后序遍历右子树
printf ("%c", root->data); //访问根结点
}
}
2.二叉树遍历算法的非递归实现(注释可参考上面的)
后序遍历与先序、中序不太一样,要注意加深理解
#define MAXSIZE 100 //定义栈 typedef struct { BinTree elem[MAXSIZE]; int top; }SeqStack; //1.先序遍历 void PreOrder(BinTree root) { SeqStack s; s.top=-1; do { while(root!=NULL) { ++s.top; if(s.top==MAXSIZE-1) { printf("overflow!"); return; } s.elem[s.top]=root; printf("%c ",root->data); root=root->lchild; } if(-1!=s.top) { root=s.elem[s.top]; --s.top; root=root->rchild; } }while(s.top!=-1 || root!=NULL); } //2.中序遍历 void InOrder (BinTree root) { SeqStack s; s.top=-1; do { while(root!=NULL) { ++s.top; if(s.top==MAXSIZE-1) { printf("overflow!"); return; } s.elem[s.top]=root; root=root->lchild; } if(-1!=s.top) { root=s.elem[s.top]; printf("%c ",root->data); --s.top; root=root->rchild; } }while(s.top!=-1 || root!=NULL); } //3.后序遍历 void PostOrder(BinTree root) { SeqStack s; s.top=-1; do { while(root!=NULL) { ++s.top; if(s.top==MAXSIZE-1) { printf("overflow!"); return; } root->isFirst=true; s.elem[s.top]=root; root=root->lchild; } if(-1!=s.top) { root=s.elem[s.top]; if(root->isFirst&&root->rchild) { root->isFirst=false; root=root->rchild; } else { printf("%c ",root->data); --s.top; root=NULL; } } }while(s.top!=-1 || root!=NULL); }
相关文章推荐
- 数据结构 — 实现二叉树的前序,中序,后序遍历(非递归)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- (编程训练)再回首,数据结构——二叉树的前序、中序、后序遍历(递归)
- (编程训练)再回首,数据结构——二叉树的前序、中序、后序遍历(非递归)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构 分别用递归和非递归方法实现二叉树先序,中序,后序遍历
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(一)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 【数据结构与算法】二叉树 前序 中序 后序 非递归实现 极简
- 二叉树的前序、中序、后序、层次遍历的递归与非递归实现
- 采用二叉链表结构实现二叉树,并以递归遍历思想实现二叉树的创建、二叉树的遍历(先序、中序、后序和层次遍历)
- 数据结构基础5.1:树的遍历(递归与非递归实现)
- 【数据结构与算法】(六) c 语言实现简单的二叉树静态创建及先序、中序、后序遍历
- 数据结构---二叉树的前序、中序、后序遍历的递归和非递归 实现(C++)