c语言实现二叉树链表存储非递归实现代码先序遍历,中序遍历,后序遍历,层次遍历
时间: 2024-12-06 15:25:25 浏览: 12
在C语言中,我们可以使用结构体来表示二叉树节点,并使用链表的方式将其存储。这里是一个简单的非递归实现:
首先,定义一个二叉树节点结构体:
```c
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点指针
struct TreeNode* right; // 右子节点指针
} TreeNode;
```
接下来是非递归实现的遍历算法:
1. 先序遍历(根-左-右):
```c
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 访问当前节点
preOrderTraversal(root->left); // 遍历左子树
preOrderTraversal(root->right); // 遍历右子树
}
}
```
2. 中序遍历(左-根-右):
```c
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left); // 遍历左子树
printf("%d ", root->val); // 访问当前节点
inOrderTraversal(root->right); // 遍历右子树
}
}
```
3. 后序遍历(左-右-根):
```c
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left); // 遍历左子树
postOrderTraversal(root->right); // 遍历右子树
printf("%d ", root->val); // 访问当前节点
}
}
```
4. 层次遍历(广度优先搜索,从上到下逐层访问):
```c
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return;
Queue<TreeNode*> queue;
queue.enqueue(root);
while (!queue.isEmpty()) {
TreeNode* node = queue.dequeue();
printf("%d ", node->val); // 当前层节点
if (node->left) queue.enqueue(node->left);
if (node->right) queue.enqueue(node->right);
}
}
```
记得在实际使用之前创建一个二叉树实例并初始化。
阅读全文