【发布时间】:2021-01-17 16:50:15
【问题描述】:
我是一个新手,正在尝试学习 C,但在实现链表中的字符串和指针时遇到了一些问题。我被要求使用链表构建预购树,结果出现了一个问题。
顺便说一句,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
struct BinTreeNode {
char *data ;
struct BinTreeNode *left;
struct BinTreeNode *right;
};
struct BinTreeNode *initBinTreeNode(char *data);
void visit(char *data);
void preorder(struct BinTreeNode *node);
void postorder(struct BinTreeNode *node);
void inorder(struct BinTreeNode *node);
int main(void)
{
struct BinTreeNode *root, *parent1, *parent2;
/* growing the tree */
root = initBinTreeNode("5");
root->left = initBinTreeNode("Mee (F) & Keong (M)");
root->right = initBinTreeNode("Saw (F)");
parent1 = root->left;
parent1->left = initBinTreeNode("Min (F) & Heng (M)");
parent1->right = initBinTreeNode("Ning (F)");
parent2 = parent1->left;
parent2->left = initBinTreeNode("Rui (F)");
/* traverse and print tree */
printf("\nPreorder traversal:\t"); preorder(root);
return(0);
}
void preorder(struct BinTreeNode *node)
{
if (node){ /* if Node exists */
visit(node->data);
preorder(node->left);
preorder(node->right);
}
}
void visit(char *data)
{
printf("%c -", *data);
}
struct BinTreeNode *initBinTreeNode(char *data)
{
struct BinTreeNode *temp;
temp = malloc(sizeof(struct BinTreeNode));
if (temp == NULL)
{
printf ("Memory allocation failed.");
return NULL;
}
(*temp).data = data;
(*temp).left = NULL;
(*temp).right = NULL;
return (temp);
}
当我有 {"5"},{"Mee (F) & Keong (M)"},{"Saw (F)"},{"Min (F) & Heng (M)"},{ "Ning(F)"},{"Rui(F)"} 在我的列表中,只有第一个单词是这样打印出来的:
Preorder traversal: 5 -M -M -R -N -S -
我想要的预购输出应该是:
Preorder traversal: 5 -Mee (F) & Keong (M) -Min (F) & Heng (M) -Rui (F) -Ning (F) -Saw (F) -
我可以知道,我错过了什么吗?如果您能提供任何帮助和建议,我将不胜感激!
【问题讨论】:
-
欢迎来到 Stack Overflow。编写代码时,明智的做法是尽可能独立开发新功能,并使其完美运行,然后再将其引入整体。如果您在第一次编写
visit时测试过它,您会注意到错误,并且知道该错误在该函数中。
标签: c linked-list