线索二叉树

来源:互联网 发布:mac关闭文件夹快捷键 编辑:程序博客网 时间:2024/06/05 17:58
#include<iostream>using namespace std;//线索存储标志位//Link(0):表示指向左右孩子的指针//Thread(1):表示指向前驱后继的线索typedef enum {Link, Thread} pointerTag;//建立树的结点typedef struct BiThrNode {char data;struct BiThrNode *rchild, *lchild;pointerTag ltag, rtag;}BiThrNode, *BithrTree;//全局变量,始终指向刚刚访问过的结点BithrTree pre;//建立线索二叉树void creatThrTree(BithrTree &T){char c;cin >> c;if (c == '0'){T = NULL;}else{T = (BiThrNode*)malloc(sizeof(BiThrNode));T->data = c;T->ltag = Link;T->rtag = Link;creatThrTree(T->lchild);creatThrTree(T->rchild);}}void visit (char c){cout << c;}//中序遍历二叉树void InOrderThrBiTree (BithrTree T){if (T){InOrderThrBiTree (T->lchild);               //递归左孩子线索化// 结点处理if (!T->lchild){T->ltag = Thread;T->lchild  = pre;}if (!pre->rchild){pre->rtag = Thread;pre->rchild = T;}pre = T;visit(T->data);InOrderThrBiTree (T->rchild);              //递归右孩子线索化}}void InOrderThr(BithrTree p, BithrTree T){p= (BithrTree)malloc(sizeof(BiThrNode));p->ltag = Link;p->rtag = Thread;p->rchild = p;if (!T){p->lchild = p;}else{p->lchild = T;pre = p;InOrderThrBiTree(T);pre->rchild = p;pre->rtag = Thread;p->rchild = pre;}}int main (){BithrTree p = NULL, T = NULL;creatThrTree(T);InOrderThr(p,T);cout << endl;system("pause");return 0;}

0 0