当前位置:文档之家› 二叉树的遍历及线索化

二叉树的遍历及线索化

青岛理工大学数据结构课程实验报告
void PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){
if(T){
Visit(T->data);//首先访问根结点
PreOrderTraverse(T->lchild,Visit);//然后递归遍历左子树
PreOrderTraverse(T->rchild,Visit);//最后递归遍历右子树}}
//中序遍历时先递归遍历左子树,然后访问根结点,最后递归遍历右子树;后序遍历时先递归遍历左子树,然后递归遍历右子树,最后
访问根结点
3、//先把栈及队列相关操作的头文件包括进来
1)根指针入栈,
2)向左走到左尽头(入栈操作)
3)出栈,访问结点
4)向右走一步,入栈,循环到第二步,直到栈空
//层次遍历时,若树不空,则首先访问根结点,然后,依照其双亲结
点访问的顺序,依次访问它们的左、右孩子结点;
4.首先建立二叉线索存储:包含数据域,左右孩子指针以及左右标志
typedef enum { Link=0,Thread=1 } PointerTag;
typedef struct BiThrNode{
TElemType data;
struct BiThrNode *lchild,*rchild;//左右孩子指针
PointerTag LTag,RTag;//左右标志
}BiThrNode, *BiThrTree;
建立前驱线索和后继线索,并用中序遍历进行中序线索化,然后最
后一个结点线索化









把测试数据放在f:\\file\\data.txt里,测试数据为:1 2 4 0 0 0 3 5 0 0 0
总访问结点是指访问该结点的数据域,弄清楚各个指针所指的类型。

相关主题