武汉科技大学WuhanUniversityofScienceandTechnology数据结构DataStructures张凯计算机学院软件工程系2011年3月12日树和森林第6章树和二叉树树的基本概念二叉树遍历二叉树和线索二叉树赫夫曼树及其应用提出问题§6
3遍历二叉树和线索二叉树在二叉树的一些应用中,常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理
这就提出了遍历二叉树的问题
遍历是任何类型均有的操作§6
3遍历二叉树和线索二叉树对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继);而二叉树是非线性结构,每个结点有两个后继,则存在如何遍历,即按什么样的搜索路径遍历的问题
遍历二叉树§6
3遍历二叉树和线索二叉树对二叉树而言,是由三个基本单元组成:根结点、左子树和右子树
因此,若能遍历这三部分,便是遍历了整个二叉树
考虑:一共有多少种遍历二叉树的方案
遍历二叉树§6
3遍历二叉树和线索二叉树假如以L、D、R分别表示遍历二叉树的左子树、访问根结点、遍历右子树,则有DLR、LDR、LRDDRL、RDL、RLD先序中序后序六种遍历方案选择先左后右的遍历算法§6
3遍历二叉树和线索二叉树先(根)序遍历算法DLR中(根)序遍历算法LDR后(根)序遍历算法LRD先(根)序遍历算法§6
3遍历二叉树和线索二叉树若二叉树为空树,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树
voidPreOrderTraverse(BiTreebt){if(bt){printf("%c",bt->data);/*输出根结点数据域的值*/PreOrderTraverse(bt->lchild);/*先序遍历左子树*/PreOrderTraverse(bt->rchild);/*先序遍历右子树*/}}中(根)序遍历算法§6