博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线索二叉树的构建和遍历------小甲鱼数据结构和算法
阅读量:7218 次
发布时间:2019-06-29

本文共 2032 字,大约阅读时间需要 6 分钟。

#include 
#include
typedef char ElemType;// 线索存储标志位// Link(0):表示指向左右孩子的指针// Thread(1):表示指向前驱后继的线索typedef enum {Link, Thread} PointerTag;typedef struct BiThrNode{ char data; struct BiThrNode *lchild,*rchild; PointerTag ltag; PointerTag rtag;} BiThrNode,*BiThrTree;// 定义一个全局变量表示刚刚走过的节点BiThrTree pre;// 创建一棵二叉树,约定用户遵照前序遍历的方式输入数据void CreateBiThrTree(BiThrTree *T) { char c; scanf("%c",&c); if ( ' ' == c ){ *T = NULL; }else { *T = (BiThrNode *)malloc(sizeof(BiThrNode)); (*T)->data = c; (*T)->ltag = Link; (*T)->rtag = Link; CreateBiThrTree(&(*T)->lchild); CreateBiThrTree(&(*T)->rchild); }}// 中序遍历线索化void InThreading(BiThrTree T){ if ( T ) { InThreading(T->lchild); // 递归左孩子线索化 if( !T->lchild ){ T->ltag = Thread; T->lchild = pre; } if ( !pre->rchild ){ pre->rtag = Thread; pre->rchild = T; } pre = T; InThreading(T->rchild); // 递归右孩子线索化 }}// 初始化一个头指针void InOrderThreading( BiThrTree *p, BiThrTree T){ *p = (BiThrNode *)malloc(sizeof(BiThrNode)); (*p)->ltag = Link; (*p)->rtag = Link; (*p)->rchild = *p; if (!T) { (*p)->lchild = *p; }else { (*p)->lchild = T; pre = *p; InThreading(T); pre->rchild = *p; pre->rtag = Thread; (*p)->rchild = pre; }}void visit (char c){ printf("%c",c);}// 中序遍历二叉树,迭代void InOrderTraverse( BiThrTree T ) { BiThrTree p; p = T->lchild; while( p!=T ){ while( p->ltag == Link ){ p = p->lchild; } visit(p->data); while( p->rtag == Thread && p->rchild !=T ){ p = p->rchild; visit(p->data); } p = p->rchild; }}int main(){ BiThrTree P,T = NULL; CreateBiThrTree( &T ); InOrderThreading( &P, T ); printf("中序遍历二叉树的结果为:"); InOrderTraverse( P ); printf("\n"); return 0;}

运行截图

 

转载于:https://www.cnblogs.com/ncuhwxiong/p/7236892.html

你可能感兴趣的文章
oracle体系结构基础
查看>>
有关TCP和UDP 粘包 消息保护边界
查看>>
Mono为何能跨平台?聊聊CIL(MSIL)
查看>>
安装scrapy问题:-bash:scrapy:command not found
查看>>
CentOS7 重置root密码
查看>>
博客作业四
查看>>
Scanner 输入---从键盘输入两个数进行相加
查看>>
test
查看>>
说无可说
查看>>
mysql 语句优化
查看>>
SCP 命令参数使用详解(最详细使用指南)
查看>>
windows cmd color setup
查看>>
一些问题
查看>>
ubuntu配置cudnn
查看>>
P1242 新汉诺塔 && UVA10795 A Different Task
查看>>
从零开始学习PYTHON3讲义(十一)计算器升级啦
查看>>
从零开始学习PYTHON3讲义(三)写第一个程序
查看>>
WebGis设计模式
查看>>
cocos2dx ScrollView 测试一 触摸事件优先级和自动调整
查看>>
django 使用mysql数据库的流程
查看>>