在我的本科课程中,我一直在用C进行树木练习,结果却很奇怪。
这是未按预期输出的代码。我有一棵树,其根是struct node * root,而preorder函数将数据打印到树上的每个节点上。
struct node{
char data;
struct node * left;
struct node * right;
};
struct node* newNode(char data){
struct node* node = malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
void preorder(struct node * root){
//struct node * start = root;
struct node * L;
struct node * R;
if(root!=NULL){
printf("%c",root->data);
preorder(root->left);
preorder(root->right);
}
}
int main(){
struct node * root = newNode("a");
root->left = newNode("b");
root->right = newNode("c");
root->left->left = newNode("d");
root->left->right = newNode("e");
root->right->left = newNode("f");
root->right->right = newNode("g");
preorder(root);
return 0;
}
我原本希望输出是“ abdecfg”,但是终端却输出了一个奇怪的结果,就像这样; https://i.imgur.com/LudpUn7.png。 我收到GCC警告“ [警告]赋值从指针进行整数转换而没有强制转换”,但是我不明白为什么。 如果在char输入上使用取消引用星号,则错误停止,并且我得到了预期的输出,如下所示;
int main(){
struct node * root = newNode(*"a");
root->left = newNode(*"b");
root->right = newNode(*"c");
root->left->left = newNode(*"d");
root->left->right = newNode(*"e");
root->right->left = newNode(*"f");
root->right->right = newNode(*"g");
preorder(root);
return 0;
}
请注意,如果我将取消引用星号放在newNode输入上,则它不起作用[1]。
在此先感谢您的帮助。
答案 0 :(得分:1)
双引号("
)表示字符串,它们变成char *
(指针)。您希望单引号('
)获得字符常量。
答案 1 :(得分:-1)
您正在尝试从字符串(“”)转换为char('')。字符串是const char *或char数组,或一堆字符。只需切换:
struct node * root = newNode("a");
收件人
struct node * root = newNode('a');
以此类推,适用于所有构造函数。