TreeNode* createTree() { int val; scanf("%d", &val); if (val == -1) { return NULL; } TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode)); root->val = val; root->left = createTree(); root->right = createTree(); return root; }这个递归创建二叉树代码有错误,帮我修改
时间: 2024-01-18 22:02:49 浏览: 131
这个递归创建二叉树的代码看起来没有问题。但是,如果您的问题是二叉树的创建方式,那么我可以给您提供一些建议:
1. 首先,您需要定义一个 TreeNode 结构体,它应该包括一个值(val)、左子节点(left)和右子节点(right)。
2. 然后,您可以编写一个递归函数 createTree(),该函数读取一个整数值并将其分配给当前节点的值。如果值为-1,则返回 NULL,否则递归创建左子树和右子树,然后将它们分配给当前节点的左子节点和右子节点。
3. 在主函数中,您可以调用 createTree() 函数来创建二叉树。然后,您可以根据需要遍历二叉树。
下面是一个示例代码,它实现了上述建议的步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 递归创建二叉树
TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) {
return NULL;
}
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
// 前序遍历二叉树
void preorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
int main() {
// 创建二叉树
TreeNode *root = createTree();
// 前序遍历二叉树
printf("前序遍历结果为:");
preorderTraversal(root);
printf("\n");
return 0;
}
```
希望这可以帮助您创建一个二叉树。如果您还有其他问题,请随时问我。
阅读全文