二叉树的创建与遍历c语言
时间: 2024-10-21 07:03:43 浏览: 16
在C语言中,二叉树是一种常见的数据结构,用于表示元素间的关联。创建和遍历二叉树通常包括以下几个步骤:
**创建二叉树**:
1. 定义节点结构体:包含整型的数据域和两个指向子节点的指针,通常是左孩子和右孩子。
```c
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
```
2. 创建函数,如`insertNode`或`buildTree`,通过递归或迭代方式插入新节点并调整子树结构。
**遍历二叉树**:
1. **前序遍历** (根-左-右):先访问根节点,然后递归地访问左子树,最后右子树。
```c
void preorder(Node* root) {
if (root != NULL) {
printf("%d ", root->data); // 访问根
preorder(root->left); // 左子树
preorder(root->right); // 右子树
}
}
```
2. **中序遍历** (左-根-右):先遍历左子树,再访问根节点,最后右子树。
```c
void inorder(Node* root) {
if (root != NULL) {
inorder(root->left);
printf("%d ", root->data); // 访问根
inorder(root->right);
}
}
```
3. **后序遍历** (左-右-根):先左右子树,再访问根节点。
```c
void postorder(Node* root) {
if (root != NULL) {
postorder(root->left);
postorder(root->right);
printf("%d ", root->data); // 访问根
}
}
```
4. **层次遍历**(广度优先搜索):使用队列辅助,逐层从上到下访问。
```c
void levelOrder(Node* root) {
if (root == NULL) return;
queue<Node*> q;
q.push(root);
while (!q.empty()) {
Node* node = q.front();
q.pop();
printf("%d ", node->data);
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
```
阅读全文