用c语言创建一个二叉树并遍历
时间: 2024-11-04 10:14:10 浏览: 4
在C语言中,我们可以使用结构体和指针来创建一个简单的二叉树,并通过递归的方式进行遍历。这里是一个基础的示例:
首先,定义一个二叉树节点的结构体:
```c
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左孩子
struct TreeNode* right; // 右孩子
} TreeNode;
```
然后,创建二叉树的基本操作:
1. **创建节点**:
```c
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
```
2. **插入节点**:
```c
TreeNode* insertNode(TreeNode* root, int val) {
if (root == NULL) {
return createNode(val);
}
if (val < root->val) {
root->left = insertNode(root->left, val);
} else {
root->right = insertNode(root->right, val);
}
return root;
}
```
接下来,我们来看三种常见的二叉树遍历方法:
- **前序遍历(根-左-右)**:
```c
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 先访问根节点
preOrderTraversal(root->left); // 再递归遍历左子树
preOrderTraversal(root->right); // 最后遍历右子树
}
}
```
- **中序遍历(左-根-右)**:
```c
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left); // 遍历左子树
printf("%d ", root->val); // 访问根节点
inOrderTraversal(root->right); // 遍历右子树
}
}
```
- **后序遍历(左-右-根)**:
```c
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left); // 遍历左子树
postOrderTraversal(root->right); // 遍历右子树
printf("%d ", root->val); // 最后访问根节点
}
}
```
阅读全文