请用c语言立一棵含有n个结点的二叉树,采用二叉链表存储,输出层序遍历的结果
时间: 2024-12-13 12:16:37 浏览: 5
在C语言中,我们可以使用递归的方式创建一个二叉链表表示的二叉树,并实现层序遍历。这里是一个简单的示例:
首先,我们需要定义二叉链表节点结构体:
```c
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左孩子指针
struct TreeNode* right; // 右孩子指针
} TreeNode;
```
接着,创建二叉树函数可以这样设计:
```c
TreeNode* createBST(int n) {
if (n <= 0) return NULL;
// 随机选择一个节点作为根
int rootValue = rand() % n + 1;
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = rootValue;
// 递归地为左子树和右子树分配节点并填充数据
root->left = createBST(n - 1);
root->right = createBST(n - 1);
return root;
}
```
对于层序遍历,我们通常会借助队列,先将根节点放入队列,然后循环执行以下步骤:
1. 当队列非空时,取出队首元素,访问该节点并将它的左右子节点(如果存在)加入队列。
2. 重复步骤1直到队列为空。
以下是层次遍历的辅助函数:
```c
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return;
Queue* queue = initQueue(); // 初始化一个队列
enqueue(queue, root); // 入队
while (!isEmpty(queue)) {
TreeNode* node = dequeue(queue); // 出队并访问当前节点
printf("%d ", node->val); // 打印节点值
// 如果有左右子节点,入队
if (node->left != NULL)
enqueue(queue, node->left);
if (node->right != NULL)
enqueue(queue, node->right);
}
destroyQueue(queue); // 关闭队列
}
// 定义队列操作相关的函数,如初始化、入队、出队等...
```
阅读全文