创建二叉树数据结构,并插入结点,通过递归的方式实现二又树 的前序遍历、中序遍历、后序遍历。用C语言
时间: 2024-12-22 20:27:48 浏览: 15
在C语言中,创建二叉树的数据结构通常会定义两个节点结构体,每个节点包含一个值和指向左右子节点的指针。以下是一个简单的二叉树节点结构的定义:
```c
typedef struct TreeNode {
int data; // 节点值
struct TreeNode* left; // 左子节点
struct TreeNode* right; // 右子节点
} TreeNode;
```
接下来,我们分别创建二叉树并插入节点:
```c
// 插入节点函数
TreeNode* insert(TreeNode* root, int val) {
if (root == NULL) { // 如果根节点为空,直接新建一个节点
return (TreeNode*)malloc(sizeof(TreeNode));
}
if (val < root->data) { // 否则比较插入值与当前节点
root->left = insert(root->left, val); // 递归左子树
} else {
root->right = insert(root->right, val); // 递归右子树
}
return root;
}
```
然后,我们可以定义三个遍历函数,分别是前序遍历、中序遍历和后序遍历,这里也使用了递归:
1. **前序遍历**(根-左-右):
```c
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->data);
preOrderTraversal(root->left); // 递归左子树
preOrderTraversal(root->right); // 递归右子树
}
}
```
2. **中序遍历**(左-根-右):
```c
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left); // 递归左子树
printf("%d ", root->data); // 输出根节点
inOrderTraversal(root->right); // 递归右子树
}
}
```
3. **后序遍历**(左-右-根):
```c
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left); // 递归左子树
postOrderTraversal(root->right); // 递归右子树
printf("%d ", root->data); // 输出根节点
}
}
```
阅读全文