快来帮忙!看看我的2叉树的程序哪里错了!(只有这么多分了,请大家原谅)
题目:按递增顺序生成集合M的最小的100个数,并输出之.M的定义:1. 1∈M,2.X∈M,则2*x+1∈M,3*x+1∈M,如集合1,3,4,7,9....(要求用2叉树解决)
我用一个2叉树,把2*x+1放到左只,3*x+1放到右只,然后遍历,最后排序,找出前100个就韦结果
#include <stdio.h>
#include <stdlib.h>
struct BTNode
{
long lData;
struct BTNode *leftPtr;
struct BTNode *rightPtr;
};
long data[127];
int iTemp;
void insertNode(struct BTNode **treePtr,long value)
{
if ((*treePtr)==NULL)
{
(*treePtr)=(struct BTNode *)malloc(sizeof(struct BTNode));
if (treePtr!=NULL)
{
(*treePtr)->lData=value;
(*treePtr)->leftPtr=NULL;
(*treePtr)->rightPtr=NULL;
}
}
else
{
insertNode(&((*treePtr)->leftPtr),2*value+1);
insertNode(&((*treePtr)->rightPtr),3*value+1);
}
}
void inOrder(struct BTNode *treePtr)
{
if (treePtr!=NULL)
{
iTemp=iTemp+1;
inOrder(treePtr->leftPtr);
data[iTemp]=treePtr->lData;
inOrder(treePtr->rightPtr);
}
}
void sort(long *list,int index) /*index :the number that to sort in array*/
{
int i,j;
int change;
int temp;
while(!change)
{
change=1;
for(j=index;j>0;j++)
{
for (i=0;i<j-i;i++)
{
temp=list[i+1];
list[i+1]=list[i];
list[i]=temp;
change=0;
}
}
}
}
void main()
{
struct BTNode *rootPtr=NULL;
int i;
/*long lTemp0,lTemp1;*/
long lBegin=1;
iTemp=0;
for(i=1;i<=7;i++)
{
insertNode(&rootPtr,1);
}
inOrder(rootPtr);
sort(data,128);
for (i=0;i<100;i++)
printf("%ld ",data[i]);
}
问题点数:66、回复次数:4Top
1 楼Laney(6吨大笨猫)回复于 2003-06-01 00:29:40 得分 0
请大家帮忙Top
2 楼Laney(6吨大笨猫)回复于 2003-06-01 02:26:51 得分 0
已经搞定了Top
3 楼Laney(6吨大笨猫)回复于 2003-06-01 03:36:34 得分 0
原来是冒泡排序出了问题!改为用qsort()
正确的代码如下
#include <stdio.h>
#include <stdlib.h>
struct BTNode
{
long lData;
struct BTNode *leftPtr;
struct BTNode *rightPtr;
};
long data[127];
int iTemp;
int compare( const void *arg1, const void *arg2 );
void insertNode(struct BTNode **treePtr,long value)
{
if ((*treePtr)==NULL)
{
(*treePtr)=(struct BTNode *)malloc(sizeof(struct BTNode));
if (treePtr!=NULL)
{
(*treePtr)->lData=value;
(*treePtr)->leftPtr=NULL;
(*treePtr)->rightPtr=NULL;
}
}
else
{
insertNode(&((*treePtr)->leftPtr),2*value+1);
insertNode(&((*treePtr)->rightPtr),3*value+1);
}
}
void inOrder(struct BTNode *treePtr)
{
if (treePtr!=NULL)
{
inOrder(treePtr->leftPtr);
/*printf("%d ",treePtr->lData);*/
data[iTemp]=treePtr->lData;
iTemp=iTemp+1;
inOrder(treePtr->rightPtr);
}
}
void main()
{
struct BTNode *rootPtr=NULL;
int i;
int i1;
/*long lTemp0,lTemp1;*/
long lBegin=1;
iTemp=0;
for(i=1;i<=7;i++)
{
insertNode(&rootPtr,1);
}
inOrder(rootPtr);
qsort((void *)data,100,sizeof(long),compare);
for (i=0;i<100;i++)
printf("%ld ",data[i]);
}
int compare( const void *arg1, const void *arg2 )
{
long *a1=(long *)arg1;
long *a2=(long *)arg2;
return ((*a1)-(*a2));
}
Top
4 楼zoe_rainy(学会长大)回复于 2003-06-03 21:45:40 得分 66
天书:(
分就不要了Top




