Charles_Su 2016-11-20 16:17 采纳率: 21.4%
浏览 888

用树的兄弟存储法存储数据,交互输入信息,然后先序遍历输出,问题出在哪里?

#include
#include
#include
#include
typedef struct Tnode
{
int no; //数据元素编号
char *data; //数据元素域
struct Tnode *Child1; //第1个孩子指针域
struct Tnode *Sibling; //下1个兄弟指针域
}Node,*Tcs;
//链栈存储结构
typedef struct Snode
{
struct Tnode *tnode;
struct Snode *next;
}*Stack;
//向栈顶压入元素data
void Push(Stack &S,Tcs tnode)
{
Stack p = (Stack)malloc(sizeof(Tnode));
p->tnode = tnode;
p->next = S->next;
S->next = p;
}//Push
void Pop(Stack &S, Tcs &tnode)
{
Stack p = S->next;
if (p)
{
S->next = p->next;
tnode = p->tnode;
free(p);
}
else tnode = NULL;
}//Pop
void CreatTree(Tcs T, Stack S)//建立树的存储结构
{
Tcs p=NULL;
if (p->no != -1)//编号为-1结束
{
//申请一个树结点
p = (Tcs)malloc(sizeof(Node));
scanf("%d", &p->no);//读编号
if (p->no scanf("%s",p->data);//读入元素数据
//p->data[strlen(p->data) - 1] = '\0';
p->Child1 = p->Sibling = NULL;

    if (p->no / 10 == T->no)//第一个孩子
    {
        Push(S, T);
        T->Child1 = p;
    }
    else
    {
        //当编号小于上层时,返回上层
        while (p->no < T->no)Pop(S, T);
        T->Sibling = p;
    }
    CreatTree(p, S);
    return;
}

}//CreateTree
void Print(Tcs T)
{
//先序遍历输出信息
if (!T) return;//递归出口
printf("%5d %5s ", T->no, T->data);//输出第一个孩子信息
printf("%5d %5s (%5d-%5d)\n", T->no, T->data, T->Child1 ? T->Child1->no : 0, T->Sibling ? T->Sibling->no : 0);//输出兄弟结点信息
Print(T->Child1);
Print(T->Sibling);
}//Print
int main()
{
//建立树根结点
Tcs p = (Tcs)malloc(sizeof(Node));
p->no = 0;
scanf("%s", p->data);
p->Child1 = p->Sibling = NULL;
//建立空栈
Stack s = (Stack)malloc(sizeof(Tnode));
s->next = NULL;
CreatTree(p, s);//建立树
Print(p);//输出信息
putchar(10);
system("pause");
return 0;
}

  • 写回答

2条回答 默认 最新

  • Lmikic 2016-11-21 03:08
    关注

    if (p->no scanf("%s",p->data);//读入元素数据
    这句就有语法错误。另外,具体有什么问题,让大家看到你努力的调试后还是没有找到问题,这样大家就更愿意去帮你,以上。

    评论

报告相同问题?

悬赏问题

  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形