用c语言输入数据构造一棵二叉树,先序遍历并输出二叉树的每个结点。 示例: 输入: 1 2 3 4 6 7 8 输出:1246378
时间: 2024-12-25 16:24:07 浏览: 59
要使用C语言输入数据构造一棵二叉树并进行先序遍历,你可以按照以下步骤操作:
1. 定义二叉树节点结构体(假设根节点值已给出)[^1]:
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
2. 创建一个函数来输入节点值并返回新创建的节点:
```c
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = newNode->right = NULL;
return newNode;
}
```
3. 使用递归的方式实现先序遍历(根-左-右):
```c
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d", root->val); // 输出当前节点值
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
}
```
4. 主程序部分,接收用户输入,构建二叉树,并调用先序遍历:
```c
int main() {
int input;
queue q;
// 初始化队列
q.front = q.rear = -1;
// 读取第一个节点值作为根节点
scanf("%d", &input);
TreeNode* root = createNode(input);
// 接收后续节点值,构建二叉树
while (scanf("%d", &input) == 1) {
if (q.rear >= MAXSIZE - 1) {
printf("Queue overflow.\n"); // 处理队列满的情况
break;
}
q.data[++q.rear] = root; // 先将根节点入队
TreeNode* current = root;
while (current->val != input) {
if (current->val > input) {
if (current->left == NULL) {
current->left = createNode(input);
break;
}
current = current->left;
} else {
if (current->right == NULL) {
current->right = createNode(input);
break;
}
current = current->right;
}
}
}
// 先序遍历并输出二叉树
preorderTraversal(root);
printf("\n");
// 清理内存
while (q.rear >= 0) {
free(q.data[q.rear]);
q.rear--;
}
return 0;
}
```
阅读全文
相关推荐


















