阅读 153

线索二叉树

线索二叉树

一、存储结构

typedef enum{Link,Thread}PointerThr;typedef struct BiThrNode{
    TElemType data;    struct BiThrNode *lchild,*rchild;	//左右指针
    PointerThr LTag,RTag;	//左右标志}BiThrNode,*BiThrTree;

二、线索链表的遍历算法

线索二叉树有n+1个空指针域
1.中序遍历的第一个结点:左子树上处于最左下的的结点
2.在中序线索化链表中结点的后继:
若无右子树,为后继线索所指结点;
否则为对其右子树进行中序遍历的第一个结点

为了方便,在二叉树的线索链表上添加了一个头结点,其左指针域指向根节点,其右指针域指向中序遍历时最后一个结点

void InOrderTraverse_Thr(BiThrTree T,void(*Visit)(TElemType e)){
    p = T->lchild;	//p指向根结点
    while(p!=T){        while(p->LTag==Link)	//退出循环时,p指向左子树最左下第一个结点
            p = p->lchild;        if(!Visit(p->data))            return ERROR;        while(p->RTag==Thread && p->rchild!=T){	//访问p的后继结点
            p = p->rchild;
            Visit(p->data);
        }
        p = p->rchild;	//访问右子树
    }
}

作者:inss!w!

出处:https://www.cnblogs.com/Hfolsvh/

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐