【发布时间】:2011-05-09 05:43:41
【问题描述】:
因此,在过去的两周里,我度过了许多不眠之夜,试图编写一个我认为很简单的程序:我正在尝试从特定文件中的整数列表创建一个二叉树。这些数字被插入到二叉树中。然后我提示用户输入要搜索的值以查看是否是节点。如果是,那么我打印搜索值的左右孩子。不幸的是,我一生都无法让我的代码正常工作。非常感谢任何帮助!
#define kFileName "../../Data.txt"
struct Node {
int number;
struct Node *left, *right;
};
extern struct Node *gRootNodePtr;
void BuildTree( void );
int GetNumberFromFile( int *numPtr, FILE *fp );
void InsertInTree( int num );
void AddNode( struct Node *newNodePtr, struct Node **curNodePtrPtr );
void SearchTree( int num, struct Node *nodePtr );
void PrintChild( struct Node *nodePtr );
void InsertInTree(int num) {
struct Node *nodePtr;
nodePtr = malloc(sizeof(struct Node));
if (nodePtr == NULL)
DoError("Could not allocate memory!\n");
nodePtr->number = num;
nodePtr->left = NULL;
nodePtr->right = NULL;
AddNode(nodePtr, &gRootNodePtr);
}
void AddNode(struct Node *newNodePtr, struct Node **curNodePtrPtr) {
if (*curNodePtrPtr == NULL)
*curNodePtrPtr = newNodePtr;
else if (newNodePtr->number < (*curNodePtrPtr)->number)
AddNode(newNodePtr, &((*curNodePtrPtr)->left));
else
AddNode(newNodePtr, &((*curNodePtrPtr)->right));
}
void SearchTree(int num, struct Node *nodePtr) {
if (nodePtr == NULL)
return;
printf("Enter number to be searched: ");
scanf("%d", &num);
SearchTree(num, nodePtr);
PrintChild(nodePtr->left);
printChild(nodePtr->right);
}
void PrintChild( struct Node *nodePtr) {
printf("%d ", nodePtr->number);
}
void BuildTree(void) {
int num;
FILE *fp;
if ((fp = fopen( kFileName, "r")) == NULL)
printf("Could not read numbers file!\n");
printf("Numbers: ");
while (GetNumberFromFile( &num, fp )) {
printf("%d, ", num);
InsertInTree(num);
}
printf("\n-------\n");
fclose(fp);
}
int GetNumberFromFile(int *numPtr, FILE *fp)
{
if (fscanf(fp, "%d\n", numPtr) == EOF)
return false;
else
return true;
}
int main(int argc, char* argv[]) {
gRootNodePtr = NULL;
int num=NULL;
BuildTree();
NodePtr SearchTree(num, gRootNodePtr);
return;
}
【问题讨论】:
-
警告:初始化从没有强制转换的指针生成整数
-
还有错误:“SearchTree”的类型冲突
-
导致我无法编译。所以我什至无法运行它。在过去的几天里,我做了很多编辑,所以我发布的内容中可能有一些旧代码。但是,我主要关心的是我的 SearchTree 和 PrintChild 函数。因为那是我被困的地方。
-
PrintChild在SearchTree中第二次调用时拼写为printChild,这将无法编译。这是您正在尝试的代码吗? -
您没有使用会捕获拼写错误之类的 IDE 吗?
标签: c data-structures recursion binary-tree