mei916 2016-12-07 11:44 采纳率: 20%
浏览 802
已结题

有哪位大神帮忙把程序改一下,使它输入“ABC D E F ”得到“A B C D E F”

#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 PreTraverse(BiThTree T)
{
if(T)
{
PreTraverse(T->lchild);
if(!T->lchild)

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

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

    Pre = T;                          //记下当前结点
    if(Link==Pre->ltag) 
        PreTraverse(T->lchild);
    if(Link==Pre->rtag)
        PreTraverse(T->rchild);
}

}
//设置Pre指针
void PreOrderThreading(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;
PreTraverse(T);
Pre->rchild = *p;
Pre->rtag = Thread;
(*p)->rchild = Pre;
}
}
//先序遍历,非递归
void PreOrderTraversing(BiThTree T)
{
BiThTree p;
p = T->lchild; //p指向根接结点
while(p != T) //空树或遍历结束时 p == T
{
while(p->ltag == Link) //遍历左子树
{
visit(p->data);

      if(Link==p->ltag)
          p=p->lchild;
     else
         p=p->rchild;

       }

}

}
int main()
{
BiThTree P,T = NULL;

CreateBiThTree(&T);

PreOrderThreading(&P,T);

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

PreOrderTraversing(P);



return 0;

}

  • 写回答

1条回答 默认 最新

  • tusong86 2016-12-07 12:26
    关注

    ABC D E F ”得到“A B C D E F,也就是在A和B,B和C之间加入空格,请问为什么要这么做,有什么规律,编程总要知道原因

    评论

报告相同问题?

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型