根据输入构造二叉树,输出该二叉树的先序序列。二叉树共有N个节点,节点编号是1到N。约定1号节点是根节点。c语言
时间: 2024-10-15 12:24:48 浏览: 25
在 C 语言中,构建二叉树并求其先序遍历序列通常需要使用递归。首先,定义一个结构体表示二叉树的节点,然后提供一个函数用于创建节点并处理递归过程。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子树指针
struct TreeNode* right; // 右子树指针
} TreeNode;
// 创建新节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 先序遍历函数
void inorderTraversal(TreeNode* root, int arr[], int& index) {
if (root == NULL)
return;
// 先访问当前节点
arr[index++] = root->val;
// 再递归遍历左子树
inorderTraversal(root->left, arr, index);
// 最后遍历右子树
inorderTraversal(root->right, arr, index);
}
// 构建二叉树并返回先序序列
int* constructAndPreorderTraversal(int N, int input[]) {
TreeNode* root = createNode(input[0]);
int* result = (int*)malloc(N * sizeof(int)); // 初始化结果数组
int index = 0;
inorderTraversal(root, result, index); // 执行先序遍历
return result;
}
// 主函数示例
int main() {
int N, input[] = {1, 2, 3, 4, 5};
N = sizeof(input) / sizeof(input[0]);
int* preorder = constructAndPreorderTraversal(N, input);
printf("先序遍历结果: ");
for (int i = 0; i < N; i++) {
printf("%d ", preorder[i]);
}
free(preorder);
return 0;
}
```
在这个例子中,`constructAndPreorderTraversal` 函数接收输入数组 `input` 和节点数 `N`,然后创建二叉树并执行先序遍历。在 `main` 函数中,我们为一个示例输入创建了一个二叉树,并打印出先序遍历的结果。
阅读全文