采用链式存储结构建立二叉树。 采用非递归算法实现二叉树的层次遍历。c语言
时间: 2024-10-29 08:15:16 浏览: 31
数据结构:二叉树层次遍历算法解析及C语言实现
在C语言中,采用链式存储结构建立二叉树通常会使用结构体来表示节点,并通过链表连接节点。以下是创建二叉树的基本步骤:
1. 定义一个二叉树节点的数据结构,包含两个指向左右孩子的指针(通常是`struct Node* left` 和 `struct Node* right`),以及一个数据域`data`。
```c
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} TreeNode;
```
2. 创建二叉树的方法可以是一个简单的插入函数,比如先序、中序或后序插入:
```c
TreeNode* insert(TreeNode* root, int value) {
if (root == NULL) {
root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = value;
root->left = root->right = NULL;
} else if (value < root->data) {
root->left = insert(root->left, value);
} else {
root->right = insert(root->right, value);
}
return root;
}
```
对于二叉树的层次遍历(广度优先搜索,BFS),你可以用队列来辅助。下面是非递归的层次遍历算法:
```c
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
// 使用队列存放节点
queue<TreeNode*> q;
q.enqueue(root);
while (!q.isEmpty()) {
// 弹出队首元素
TreeNode* node = q.dequeue();
printf("%d ", node->data); // 打印当前层节点值
// 将当前节点的左孩子和右孩子入队
if (node->left != NULL) {
q.enqueue(node->left);
}
if (node->right != NULL) {
q.enqueue(node->right);
}
}
}
阅读全文