二叉树的创建和遍历c语言代码
时间: 2023-11-11 21:06:43 浏览: 86
二叉树的创建和遍历可以使用递归实现,以下是C语言代码:
```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) { // 输入-1表示该节点为空
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
// 前序遍历
void preOrder(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val); // 打印节点值
preOrder(root->left); // 遍历左子树
preOrder(root->right); // 遍历右子树
}
// 中序遍历
void inOrder(TreeNode* root) {
if (root == NULL) {
return;
}
inOrder(root->left); // 遍历左子树
printf("%d ", root->val); // 打印节点值
inOrder(root->right); // 遍历右子树
}
// 后序遍历
void postOrder(TreeNode* root) {
if (root == NULL) {
return;
}
postOrder(root->left); // 遍历左子树
postOrder(root->right); // 遍历右子树
printf("%d ", root->val); // 打印节点值
}
int main() {
TreeNode* root = createTree(); // 创建二叉树
printf("preOrder: ");
preOrder(root); // 前序遍历
printf("\ninOrder: ");
inOrder(root); // 中序遍历
printf("\npostOrder: ");
postOrder(root); // 后序遍历
return 0;
}
```
在运行程序时,可以按照先序遍历的顺序输入二叉树的节点值,-1表示该节点为空。例如,输入以下序列:
```
1 2 4 -1 -1 5 -1 -1 3 -1 -1
```
表示如下二叉树:
```
1
/ \
2 3
/ \
4 5
```
程序会输出先序遍历、中序遍历和后序遍历的结果。
阅读全文