二叉树编程,输出出现重复怎么回事。

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>typedefstructt... #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct treenode{
char word[256];
struct treenode *lchild;
struct treenode *rchild;
}pnode,*treeptr;
//typedef struct treenode ;
//typedef pnode ;
void insertNode(treeptr &ptr,char *current);
void inorderNode(treeptr ptr);
void main()
{
treeptr rootptr=NULL;
FILE *fp;
char temp[256];
fp=fopen("21.txt","r");
while(!feof(fp))
{
fscanf(fp,"%s",temp);
//printf("%s ",temp);
insertNode(rootptr,temp);

inorderNode(rootptr);
//printf("%s ",temp);

}
}
void insertNode(treeptr &ptr,char *current)
{
treeptr nodeptr;
if(nodeptr=new treenode)

{
strcpy(nodeptr->word,current);
nodeptr->lchild=NULL;
nodeptr->rchild=NULL;
}

if(ptr==NULL)
{
ptr=nodeptr;
}
else
{

insertNode(nodeptr->lchild,nodeptr->word);

insertNode(nodeptr->rchild,nodeptr->word);

}

}
void inorderNode(treeptr ptr)
{
if(ptr!=NULL)
{
printf("%s ",ptr->word);

inorderNode(ptr->lchild);

inorderNode(ptr->rchild);
delete ptr;
}

//ptr=ptr->lchild;

}
展开
 我来答
高金山
推荐于2016-08-09 · TA获得超过1万个赞
知道大有可为答主
回答量:4101
采纳率:0%
帮助的人:1691万
展开全部
void insertNode(treeptr &ptr,char *current)
这个函简伏正数写的有问题,除了第一次,其他的单词节点,都被重复添加了

main()函数也有点问厅改题,inorderNode应该放在while循环外面,并拦悔将程序退出前要把文件关闭掉

修改如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct treenode{
char word[256];
struct treenode *lchild;
struct treenode *rchild;
}pnode,*treeptr;

void insertNode(treeptr &ptr,char *current);
void inorderNode(treeptr ptr);
void main()
{
treeptr rootptr=NULL;
FILE *fp;
char temp[256];
fp=fopen("21.txt","r");
while(!feof(fp))
{
fscanf(fp,"%s",temp);
insertNode(rootptr,temp);
}
inorderNode(rootptr);
fclose(fp);
}

void insertNode(treeptr &ptr,char *current)
{
treeptr nodeptr;

if(ptr==NULL)
{
if(nodeptr=new treenode)
{
strcpy(nodeptr->word,current);
nodeptr->lchild=NULL;
nodeptr->rchild=NULL;
}
ptr=nodeptr;
}
else if(strcmp(ptr->word,current)<0)
{
insertNode(ptr->lchild,current);
}
else
{
insertNode(ptr->rchild,current);
}
}

void inorderNode(treeptr ptr)
{
if(ptr!=NULL)
{
printf("%s ",ptr->word);
inorderNode(ptr->lchild);
inorderNode(ptr->rchild);
delete ptr;
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式