【发布时间】:2019-07-27 04:34:11
【问题描述】:
我尝试使用递归来创建二叉树,但是当我输入ABD***CE**FG*** 时,代码没有产生任何结果。我按了空格键,但代码仍然没有一半。是代码错误还是我的输入错误?
#include <stdio.h>
#include <stdlib.h>
typedef struct tree
{
struct tree *left;
struct tree *right;
char val;
}treeNode;
void createTree(treeNode **node)
{
char value=0;
value=getchar();
if(value=='*')
*node=NULL;
else
{
*node = (treeNode*)malloc(sizeof(treeNode));
if(!*node) exit(-1);
(*node)->val=value;
createTree(&(*node)->left);
createTree(&(*node)->right);
}
}
void preOrder(treeNode *node)
{
if (node==NULL) return;
putchar(node->val);
preOrder(node->left);
preOrder(node->right);
}
int main() {
// insert code here...
treeNode **node;
createTree(node);
preOrder(*node);
return 0;
}
【问题讨论】:
-
代码中未定义行为的第一个实例是
treeNode **node; createTree(node),它将一个未初始化的变量传递给createTree。 -
喜欢这个:
Thing* createThing(void)到这个:void createThing(Thing** thing)。 -
和写一样的问题:
int *value; scanf("%d", value);而不是int value; scanf("%d", &value);。一个经典。有大量重复项。
标签: c recursion binary-tree getchar