您的位置:逆风者 数据结构 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:104 来源:未知

教学目的: 掌握二叉树遍历的三种方法

教学重点: 二叉树的遍历算法

教学难点: 中序与后序遍历的非递归算法

授课内容:

逆风编程精品
一、复习二叉树的定义

二叉树由三个基本单元组成:根结点、左子树、右子树

问题:如何不重复地访问二叉树中每一个结点?

二、遍历二叉树的三种方法:

先序
1 访问根结点 2 先序访问左子树 3 先序访问右子树
中序
1 中序访问左子树 2 中序访问根结点 3 中序访问右子树
后序
1 后序访问左子树 2 后序访问右子树 3 访问根结点

三、递归法遍历二叉树

先序:

Status(PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){

if(T){

if(Visit(T->data))

if(PreOrderTraverse(t->lchild,Visit))

if(PreOrderTraverse(T->rchild,Visit)) return OK;

return ERROR;

}else return OK;

}

遍历结果:1,2,4,5,6,7,3

四、非递归法遍历二叉树

中序一:

Status InorderTraverse(BiTree T,Status(*Visit)(TElemType e)){

InitStack(S);Push(S,T);

while(!StackEmpty(S)){

while(GetTop(S,p)&&p)Push(S,p->lchild);

Pop(S,p);

if(!StackEmpty(S)){

Pop(S,p); if(!Visit(p->data)) return ERROR;

Push(S,p->rchild);

}

}

return OK;

}

中序二:

Status InorderTraverse(BiTree T,Status(*Visit)(TElemType e)){

InitStack(S);p=T;

while(p||!StackEmpty(S)){

if(p){Push(S,p);p=p->lchild;}

else{

Pop(S,p); if(!Visit(p->data)) return ERROR;

p=p->rchild);

}//else

}//while

return OK;

}

五、总结

二叉树遍历的意义

相关文章

数据结构教程 第六课 线性表的顺序表示和实
数据结构教程 第二十二课 实验五 数组实验
数据结构教程 第二十一课 树、二叉树定义及
数据结构教程 第三十八课 文件概念,顺序文
数据结构教程 第十二课 实验二 循环链表实验
数据结构教程 第十一课 栈的应用
数据结构教程 第二十八课 图的存储结构
数据结构教程 第三十七课 实验八 排序实验
二叉树基本操作的程序实现
数据结构教程 第二课 抽象数据类型的表示与
数据结构教程 第三十一课 动态查找表
数据结构教程 第三十二课 哈希表(一)
数据结构教程 第十六课 串操作应用举例
排序及查找方法
数据结构教程 第二十六课 图的定义与术语
数据结构教程 第十课 栈的表示与实现
数据结构--序言
线索二叉树算法
数据结构教程 第三十六课 选择排序,归并排
数据结构教程 第二十课 广义表

相关评论


本文章所属分类:首页 数据结构

  热门关键字: