c语言实现二叉搜索树层层遍历
时间: 2023-08-23 09:15:58 浏览: 98
C语言实现二叉搜索树,可插入、删除搜索节点
要实现二叉搜索树的层次遍历,您可以使用队列数据结构来帮助进行层次遍历。下面是一个使用C语言实现二叉搜索树层次遍历的示例代码:
```c#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构struct Node {
int data;
struct Node* left;
struct Node* right;
};
// 创建新节点struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("内存分配失败!");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入节点到二叉搜索树struct Node* insertNode(struct Node* root, int data) {
if (root == NULL) {
return createNode(data);
}
if (data < root->data) {
root->left = insertNode(root->left, data);
} else if (data > root->data) {
root->right = insertNode(root->right, data);
}
return root;
}
// 层次遍历二叉树void levelOrderTraversal(struct Node* root) {
if (root == NULL) {
return;
}
// 创建一个队列来辅助层次遍历 struct Node** queue = (struct Node**)malloc(sizeof(struct Node*) *100);
int front =0, rear =0;
// 将根节点入队 queue[rear++] = root;
while (front < rear) {
struct Node* current = queue[front++];
printf("%d ", current->data);
// 将左右子节点入队 if (current->left != NULL) {
queue[rear++] = current->left;
}
if (current->right != NULL) {
queue[rear++] = current->right;
}
}
//释放队列内存 free(queue);
}
int main() {
struct Node* root = NULL;
// 插入节点到二叉搜索树 root = insertNode(root,50);
root = insertNode(root,30);
root = insertNode(root,20);
root = insertNode(root,40);
root = insertNode(root,70);
root = insertNode(root,60);
root = insertNode(root,80);
// 层次遍历二叉树 printf("层次遍历结果:");
levelOrderTraversal(root);
return0;
}
```
在上述代码中,我们首先定义了一个二叉树节点结构 `struct Node`,然后使用 `createNode` 函数创建新节点,使用 `insertNode` 函数将节点插入到二叉搜索树中。
在 `levelOrderTraversal` 函数中,我们使用队列来辅助层次遍历。我们通过循环从队列中取出节点,并打印节点的值。然后将该节点的左右子节点(如果存在)入队。直到队列为空。
在 `main` 函数中,我们创建了一个二叉搜索树,并调用 `levelOrderTraversal` 函数进行层次遍历。
运行上述代码,将会输出二叉搜索树的层次遍历结果。例如,对于示例中的二叉搜索树,输出结果为:50307020406080。
希望这个示例代码对您有所帮助!如果您有任何进一步的问题,请随时提问。
阅读全文