Winter_DB 2017-08-19 13:56 采纳率: 0%
浏览 1186

关于 数据结构 线索二叉树的建立和实现

学习了严蔚敏的《数据结构》为了加深映像,把上面的代码自己敲了一遍。在VC6.0里,编译
和链接都通过了,但是没有办法运行,恳求各位高手和大师告诉我,哪里出问题了,我实在
是找不出来啊!!!
#include "stdafx.h"

#include
#include
#include "math.h"

typedef char TElemType;
typedef enum PointerTag{Link,Thread};
typedef struct BiThrNode//建立线索二叉树的储存结构
{

TElemType data;
struct BiThrNode *lchild,*rchild;
PointerTag LTag,RTag;

}BiThrNode,*BiThrTree;

BiThrTree pre;//定义的全局变量,

void CreateBiTree(BiThrTree &T)//创建线索二叉树
{
for(int i=1;i {
char ch;
scanf("%c",&ch);
if(ch==' ')
{
T=NULL;
}
else
{
if(!(T=(BiThrNode*)malloc(sizeof(BiThrNode))))
{
exit(OVERFLOW);
}
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
}

void InThreading(BiThrTree p)//中序遍历进行中序线索化
{
if(p)
{
InThreading(p->lchild);
if(!p->lchild)
{
p->LTag=Thread;
p->lchild=pre;
}
if(!pre->rchild)
{
pre->RTag=Thread;
pre->rchild=p;
}
pre=p;
InThreading(p->rchild);
}
}

void InOrderThreading(BiThrTree &Thrt,BiThrTree T)//建立头结点,中序线索化二叉树
{
if(!(Thrt=(BiThrTree)malloc(sizeof(BiThrNode)))) exit(OVERFLOW);
Thrt->LTag=Link;
Thrt->RTag=Thread;
Thrt->rchild=Thrt;
if(!T) T->lchild=Thrt;
else
{
Thrt->lchild=T;
pre=Thrt;
InThreading(T);
pre->rchild=Thrt;
pre->RTag=Thread;
Thrt->rchild=pre;
}
}

int InOrderTraverse_Thr(BiThrTree T)//中序遍历线索二叉树
{
BiThrTree p;
p=T->lchild;
while(p!=T)
{
while(p) p=p->lchild;
if(p->data) return 0;
while(p->RTag==Thread&&p->rchild!=T)
{
p=p->rchild;
printf("%c",p->data);
}
p=p->rchild;
}
return 1;
}

int main(int argc, char* argv[])
{

BiThrTree T;
BiThrTree Thr;
printf("请输入前序二叉树的内容;\n");
CreateBiTree(T); //建立二叉树
InOrderThreading(T,T); //加入头结点,并线索化
printf("输出中序二叉树的内容:\n");
InOrderTraverse_Thr(T);
printf("\n");
return 0;
}

  • 写回答

1条回答 默认 最新

  • 郭建堂 2017-08-21 04:06
    关注

    http://blog.csdn.net/RAM_MAM/article/details/76825886

    scanf("%c", &ch);
    //后面要加 
    getchar();
    

    不然 CreateBiTree(T->lchild);会读取缓冲区里的 '\r\n'当做 scanf("%c", &ch);

    详情看我上面的文章

    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建