帮我看看这些代码什么问题啊???

lz12366007 2009-06-22 04:01:40
#include <stdio.h> //帮我看看这些代码什么问题啊????????????????
#include <stdlib.h>

typedef int Elem;
typedef struct NTree
{
Elem data;
struct NTree *lchild,*rchild ;
}NTree,*BiTree;
typedef struct PTNode
{
Elem data;
int parent; // 双亲位置域
}PTNode,*PNode;
typedef struct PTree
{
PNode nodes[20];//结点最大数量为20
int n; // 结点个数
}PTree,*Tree;
//
/*******************实现方法如下*********************************/
void addTree(Tree &t,PNode node);
void change(Tree t,BiTree &tree,int &i);
void changeit(Tree t,BiTree &tree,int &i);
//构造双亲结点的树
void InitTree(Tree &t);
void InitTree(Tree &tree)
{
tree=(Tree)malloc(sizeof(Tree));
tree->n=0;
}
void CreateTree(Tree &t)
{

//记录结点的个数;
PTNode *node=NULL;
node=(PTNode*)malloc(sizeof(PTNode));
node->data=1;
node->parent=-1;
printf("%d\n",t->n);
//这里我输出n的值竟然是 3670600!!我附的值是0 啊 ??
//for(int i=0;i<=t->n;i++)
printf("2\n");
addTree(t,node);//1
PTNode *node2=(PTNode*)malloc(sizeof(PTNode));
node2->data=2;
node2->parent=0;
addTree(t,node2);//2
PTNode *node3=(PTNode*)malloc(sizeof(PTNode));
node3->data=3;
node3->parent=0;
addTree(t,node3);//3
PTNode *node4=(PTNode*)malloc(sizeof(PTNode));
node4->data=4;
node4->parent=0;
addTree(t,node4);//4
PTNode *node5=(PTNode*)malloc(sizeof(PTNode));
node5->data=5;
node5->parent=2;
addTree(t,node5);//5
PTNode *node6=(PTNode*)malloc(sizeof(PTNode));
node6->data=6;
node6->parent=2;
addTree(t,node6);//6
PTNode *node8=(PTNode*)malloc(sizeof(PTNode));
node8->data=7;
node8->parent=5;
addTree(t,node8);//7

//建树一共有7个结点
}
void addTree(Tree &t,PNode node)
{

if(node->parent>t->n)
printf("结点信息有错误");
printf("%d\n",t->n);
t->nodes[t->n]->data=node->data; //这里好像不能付给值
t->nodes[t->n]->parent=node->parent;
t->n++;//节点数自增

}


//main函数********************************************************8
void main()
{
Tree t;
InitTree(t);
BiTree T;
//T=(BiTree)malloc(sizeof(BiTree));//这里如果把注释去掉 下面输出n为注释的内容
/* 3670600
3679088
2
3679088 */

printf("%d\n",t->n);
//这里输出的值是 0 但 进入 createTree是 你就变成了 很大的数 见上面注释
CreateTree(t);
ChangeTree(t,T);
Inorder(T,s);




}
...全文
94 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhp 2009-06-23
  • 打赏
  • 举报
回复
int main()
{
Tree t;
InitTree(t);
BiTree T;
T=(BiTree)malloc(sizeof(BiTree));//这里如果把注释去掉 下面输出n为注释的内容
/* 3670600
3679088
2
3679088 */
printf("%d\n",t->n);
//这里输出的值是 0 但 进入 createTree是 你就变成了 很大的数 见上面注释
CreateTree(t);
//ChangeTree(t,T); //我是屏蔽了你这两个函数哈。你这两个函数都没有实现。
//Inorder(T,s);

return 0;


}
lz12366 2009-06-23
  • 打赏
  • 举报
回复
tree=(Tree)malloc(sizeof(Tree)); 这里把Tree换成PTree试试!!!!
lz12366007 2009-06-23
  • 打赏
  • 举报
回复
还是不行啊???
3674104
3674104
2
3674104
按楼上改了后,这是输出结果
chenzhp 2009-06-22
  • 打赏
  • 举报
回复
你把InitTree函数按照我的修改一下就可以了。因为你的tree->nodes[i]节点都是一个指针,必须提前为其分配空间
lz12366007 2009-06-22
  • 打赏
  • 举报
回复
怎么初始化啊??NULL???
chenzhp 2009-06-22
  • 打赏
  • 举报
回复
void InitTree(Tree &tree) 
{
tree=(Tree)malloc(sizeof(Tree));
tree->n=0;
for(int i = 0;i <20;i++)
tree->nodes[i]=(PTNode*)malloc(sizeof(PTNode)); //在初始化中,不要忘了讲内部的nodes数组初始化,这是一个指针数组啊。你不初始化就用,
//当然出问题
}
chenzhp 2009-06-22
  • 打赏
  • 举报
回复
void addTree(Tree &t,PNode node)
{

if(node->parent>t->n)
printf("½áµãÐÅÏ¢ÓдíÎó");
printf("%d\n",t->n);
t->nodes[t->n]->data=node->data; //都没见你初始化t->nodes呢??
t->nodes[t->n]->parent=node->parent;
t->n++;//
}
god_sun 2009-06-22
  • 打赏
  • 举报
回复
void InitTree(Tree **tree)
{
*tree=(Tree)malloc(sizeof(Tree));
*tree->n=0;
}
woods2001 2009-06-22
  • 打赏
  • 举报
回复
up`

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧