【发布时间】:2022-06-27 16:41:29
【问题描述】:
假设我需要从数字61207895 构建这棵树,然后执行树的前序遍历。
6
/ \\
/ \\
/ \\
1 7
/ \\ / \\
0 2 5 8
\\
9
预期的结果是:6 1 0 2 7 5 8 9
但我的代码输出:6 1 0 2 5 7 8 9
由于某种原因,数字5 和7 的位置被切换。谁能帮我解决这个问题?
这是我的主要功能:
int main()
{
char* digits = malloc(9 * sizeof(char));
printf(\"Digits:\");
scanf(\"%s\", digits);
Node* node = createNode(digits[0] - \'0\');
for (int i = 1; i < strlen(digits); i++)
{
insertNode(node, digits[i] - \'0\');
}
free(digits);
printf(\"Pre-order Traversal: \");
preorderTraversal(node);
return 0;
}
这是我在树中插入节点的功能:
Node* insertNode(Node* node, int data)
{
if (node != NULL)
{
if (data < node->data)
{
node->left = insertNode(node->left, data);
}
else
{
node->right = insertNode(node->right, data);
}
return node;
}
else
{
return createNode(data);
}
}
这是我执行预购遍历的功能:
void preorderTraversal(Node* node)
{
if (node != NULL)
{
printf(\"%d \", node->data);
preorderTraversal(node->left);
preorderTraversal(node->right);
}
}
-
char* digits = malloc(sizeof(char));===>digits只够空字符串!你不能把\"61027589\"放在那里!! -
@pmg 当我运行代码时,
char* RA = malloc(sizeof(char))能够存储整个字符串,但无论如何,我将其编辑为char* RA = malloc(8 * sizeof(char))。 -
8字节对于\"61027589\"来说是不够的。您需要考虑终止的零字节! -
@pmg 再次编辑。
-
@SupportUkraine 这是我需要为我的课程做的作业。教授在问题中写道,我们应该按照
\"Whenever new data is to be added to the tree, it will be compared to the root node. If it is smaller than the root, it must be added to the left sub-tree, otherwise the right sub-tree\"的规则从这些数字构建这棵树。在他给出的示例中,数字61207895是树,结果应该是我在帖子中写的。但我最终得到的那棵树是@pmg 指出的那棵。
标签: c recursion data-structures binary-tree tree-traversal