如何用C语言实现二叉树的先序遍历并构建一个二叉树结构?
时间: 2024-12-14 12:07:05 浏览: 17
在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));
if (!newNode) {
printf("Memory allocation failed\n");
return NULL;
}
newNode->val = data;
newNode->left = newNode->right = NULL; // 初始化左右子节点为空
return newNode;
}
// 先序遍历函数
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 访问根节点
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
}
// 构建二叉树的函数,这里仅用于演示如何构造,实际应用会更复杂
TreeNode* buildTree() {
int arr[] = {1, 2, 3, 4, 5, 6, 7};
TreeNode* root = createNode(arr[0]);
if (arr[1] != -1) {
root->left = createNode(arr[1]);
if (arr[2] != -1) {
root->left->left = createNode(arr[2]);
// ...继续添加其他子节点
}
}
// ...根据数组元素构建完整棵树
return root;
}
int main() {
TreeNode* treeRoot = buildTree();
if (treeRoot) {
printf("Preorder traversal of the binary tree:\n");
preorderTraversal(treeRoot);
} else {
printf("Could not build the tree.\n");
}
return 0;
}
```
阅读全文