#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
struct node *create_node(int );
struct node *add_node(struct node *,int );
void asce_order(struct node *);
void desc_order(struct node *);
struct node
{
int data;
int count;
struct node *next,*previous;
};
struct node *create_node(int value)
{
struct node *pnode=(struct node *)malloc(sizeof(node));
pnode->data=value;
pnode->count=1;
pnode->next=pnode->previous=NULL;
return pnode;
}
struct node *add_node(struct node *pnode,int value)
{
if(pnode==NULL)
{
pnode=create_node(value);
return pnode;
}
else if(pnode->data == value)
{
(pnode->count)++;
return pnode;
}
else
{
if(pnode->data>value)
{
return add_node(pnode->previous,value);
}
else
{
return add_node(pnode->next,value);
}
}
}
void asce_order(struct node *pnode)
{
int i;
if(pnode->previous!=NULL)
asce_order(pnode->previous);
for(i=0;i<pnode->count;i++)
printf("%d\n",pnode->data);
if(pnode->next!=NULL)
asce_order(pnode->next);
}
void desc_order(struct node *pnode)
{
int i;
if(pnode->next!=NULL)
desc_order(pnode->next);
for(i=0;i<pnode->count;i++)
printf("%d\n",pnode->data);
if(pnode->previous!=NULL)
desc_order(pnode->previous);
}
void free_variables(struct node *pnode)
{
if(pnode==NULL)
return;
if(pnode->next!=NULL)
free_variables(pnode->next);
if(pnode->previous!=NULL)
free_variables(pnode->previous);
free(pnode);
}
int main()
{
int data;
struct node *head=NULL;
char option='y';
int choice;
while(tolower(option) == 'y')
{
printf("enter the data:");
scanf("%d",&data);
if(head==NULL)
head=create_node(data);
else
add_node(head,data);
fflush(stdin);
printf("enter the option:");
scanf("%c",&option);
}
printf("enter the choice:\n1.ascending order\n2.Descending order");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("the ascending order:\n");
asce_order(head);
break;
case 2:
printf("the descending order:\n");
desc_order(head);
break;
default :
printf("you have entered the wrong choice");
break;
}
free_variables(head);
return 0;
}
**这是我为使用二叉树对数字进行排序而编写的代码。它只打印树的头节点。我知道问题出在 add_node 函数上。当我将 add_node 中的内容替换为
if(value==pnode->data)
{
(pnode->count)++;
return pnode;
}
if(value<pnode->data)
{
if(pnode->previous==NULL)
{
pnode->previous=create_node(value);
return pnode->previous;
}
else
{
return add_node(pnode->previous,value);
}
}
else
{
if(pnode->next==NULL)
{
pnode->next=create_node(value);
return pnode->next;
}
else
return add_node(pnode->next,value);
}
第一个代码中似乎有什么问题。有人请帮帮我。谢谢**