线索二叉树的线索化及正向遍历和反向遍历

本文介绍了线索二叉树的概念,通过在二叉树的线索链表中添加头结点,实现正向和反向遍历。头结点的lchild指向根节点,rchild指向中序遍历的最后一个结点,使得从第一个结点或最后一个结点可以方便地按序遍历整个二叉树。
摘要由CSDN通过智能技术生成

仿照线性表的存储结构,在二叉树的线索链表上也添加一个头结点,并令其lchild域的指针指向二叉树的根结点,其rchild域的指针指向中序遍历时访问的最后一个结点;反之,令二叉树中序序列中的第一个结点的lchild域指针和最后一个结点rchild域的指针均指向头结点。这好比为二叉树建立了一个双向线索链表,既可从第一个结点起顺后继进行遍历,也可从最后一个结点起顺前驱进行遍历。

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef enum PointerTag {Link,Thread};
typedef int Status;

typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild,*rchild;
    PointerTag LTag,RTag;
}BiTNode,*BiTree;

int CreateBiTree(BiTree *T);
Status Visit(int e);
Status InOrderThreadTraverse(BiTree T);
Status InOrderThreadBackTraverse(BiTree T);
Status InOrderThreading(BiTree Thrt,BiTree T);
void InThreading(BiTree p,BiTree *pre);
Status MidOrderTraverse(BiTree T);

int main()
{
    BiTree *T,Thrt;
    T=(BiTree*)malloc(sizeof(BiTree));
    Thrt=(BiTree)malloc(sizeof(BiTNode));
    CreateBiTree(T);
    printf("\n中序遍历结果:");
    MidOrderTraverse(*T);
    InOrderThreadi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值