mei916 2016-12-06 13:12 采纳率: 20%
浏览 825
已采纳

如何把它改为先序线索?

#include
#include

typedef enum{Link,Thread} Pointag;//Link = 0表示指向左右孩子指针,Thread = 1表示指向前驱或后继的线索
typedef char ElemType;

typedef struct BiThNode
{
ElemType data;
struct BiThNode *lchild,*rchild;
Pointag ltag,rtag;
}BiThNode,*BiThTree;

BiThTree Pre; //定义一个全局变量作为节点的前驱指针

//创建一颗线索二叉树
void CreateBiThTree(BiThTree *T)
{
char c;

scanf("%c",&c);
if(' ' == c)
{
    *T = NULL;
}
else
{
    *T = (BiThTree)malloc(sizeof(BiThNode));
    (*T)->data = c;
    (*T)->ltag = (*T)->rtag = Link;                  //默认存左子树和右子树
    CreateBiThTree(&(*T)->lchild);
    CreateBiThTree(&(*T)->rchild);
}

}

//访问数结点
void visit(char c)
{
printf("%c ",c);
}

//采用中序遍历
void InTraverse(BiThTree T)
{
if(T)
{
InTraverse(T->lchild);
if(!T->lchild)

{
T->ltag = Thread;
T->lchild = Pre; //如果没有左孩子,则让左子树指针指向前一个访问的结点
}
if(!Pre->rchild)

{
Pre->rtag = Thread;
Pre->rchild = T; //前驱右孩子指针指向后继(当前结点T)
}

    Pre = T;                          //记下当前结点
    InTraverse(T->rchild);
}

}

//设置Pre指针
void InOrderThreading(BiThTree *p,BiThTree T)
{
*p = (BiThTree)malloc(sizeof(BiThNode));
(*p)->ltag = Link;
(*p)->rtag = Thread;
(*p)->rchild = *p;

if(!T) //如果树为空
{
(*p)->lchild = *p;
}
else
{
(*p)->lchild = T;
Pre = *p;
InTraverse(T);
Pre->rchild = *p;
Pre->rtag = Thread;
(*p)->rchild = Pre;
}
}

//中序遍历,非递归
void InOrderTraversing(BiThTree T)
{
BiThTree p;
p = T->lchild; //p指向根接结点
while(p != T) //空树或遍历结束时 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()
{
BiThTree P,T = NULL;

CreateBiThTree(&T);

InOrderThreading(&P,T);

printf("中序输出结果为:");

InOrderTraversing(P);

printf("\n");

return 0;

}

  • 写回答

2条回答 默认 最新

  • devmiao 2016-12-06 16:39
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao