线索树

将二叉树转换成一个双向链表

struct TBTNode {int data;int ltag, rtag;TBTNode *lchild;TBTNode *rchild;
};
//中序
void Inthread(TBTNode *p, TBTNode *pre) {if (p != NULL) {Inthread(p->lchild, pre);if (p->lchild == NULL) {p->lchild = pre;p->ltag = 1;}if (pre->rchild == NULL && pre != NULL) {pre->rchild = p;pre->rtag;}pre = p;Inthread(p->rchild, pre);}
}
void createInthread(TBTNode *root) {TBTNode *pre = NULL;if (root != NULL) {Inthread(root, pre);pre->rchild = NULL;pre->rtag = 1;}
}
//遍历
TBTNode *First(TBTNode *p) {while (p->ltag == 0) {p = p->lchild;}return p;
}
TBTNode *Next(TBTNode *p) {if (p->rtag == 0) {return First(p->rchild);}else {return p->rchild;}
}
void Inorder(TBTNode *root) {for (TBTNode *p = First(root); p != NULL; p = Next(p)) {cout << p->data << endl;}
}
//先序,后序和中序差不多

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部