编写c语言代码:根据输入构造二叉树,输出该二叉树的先序序列。二叉树共有N个节点,节点编号是1到N。约定1号节点是根节点。
时间: 2024-10-15 10:24:14 浏览: 26
在C语言中,你可以使用递归函数的方式来构建二叉树并输出其先序遍历序列。首先,我们需要定义一个结构体`Node`表示二叉树的节点,然后编写函数来读取用户输入、创建节点以及遍历。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点
struct TreeNode* right; // 右子节点
} TreeNode;
// 创建新节点
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 先序遍历
void printPreorder(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val); // 先访问根节点
printPreorder(root->left); // 再遍历左子树
printPreorder(root->right); // 最后遍历右子树
}
int main() {
int N, val, i = 0;
printf("Enter the number of nodes (N): ");
scanf("%d", &N);
// 根据用户输入构造二叉树
TreeNode* root = createNode(i + 1);
while (i < N) {
scanf("%d", &val);
TreeNode* newNode = createNode(val);
if (val < root->val) { // 如果新值小于当前根节点,插入左子树
if (root->left == NULL) {
root->left = newNode;
} else {
insertIntoSortedSubtree(root->left, newNode);
}
} else { // 否则,插入右子树
if (root->right == NULL) {
root->right = newNode;
} else {
insertIntoSortedSubtree(root->right, newNode);
}
}
i++;
}
// 输出先序遍历结果
printf("Preorder traversal of the constructed tree: ");
printPreorder(root);
printf("\n");
free(root); // 释放内存
return 0;
}
// 辅助函数,将新节点插入已排序的子树
void insertIntoSortedSubtree(TreeNode* subRoot, TreeNode* newNode) {
if (newNode->val < subRoot->val) {
if (subRoot->left == NULL) {
subRoot->left = newNode;
} else {
insertIntoSortedSubtree(subRoot->left, newNode);
}
} else {
if (subRoot->right == NULL) {
subRoot->right = newNode;
} else {
insertIntoSortedSubtree(subRoot->right, newNode);
}
}
}
```
在这个例子中,我们假设用户会输入一个有序数组,我们将它们插入到二叉搜索树中,然后按照先序遍历的方式输出。
阅读全文