数据结构 树 层次遍历二叉树 C语言版

//层次遍历二叉树并输出结点的算法
#include <stdio.h>
#include <stdlib.h>
typedef struct NNode
{
	char data;
	struct NNode *LChild;
	struct NNode *RChild;
} BiTNode,*BiTree;   //定义二叉树结点和结点指针

typedef BiTree QueueElementType;
typedef struct Node
{
    QueueElementType data;
    struct Node  *next;
} LinkQueueNode;  //定义队列结点
typedef struct
{
    LinkQueueNode *front; //队列头结点指针
    LinkQueueNode *rear;  //队列尾结点指针
} LinkQueue;  //定义队列

int InitQueue(LinkQueue *Q )  //初始化队列
{
    Q->front=(LinkQueueNode * )malloc(sizeof(LinkQueueNode));
    if(Q->front != NULL)
    {
        Q->rear=Q->front;
        Q->front->next=NULL;
        return 1;
    }
    else return 0;//溢出
}

int EnterQueue(LinkQueue *Q,QueueElementType x) //元素x入链队列 尾插法
{
    LinkQueueNode * newnode;
    newnode=(LinkQueueNode *) malloc(sizeof(LinkQueueNode));
    if(newnode != NULL)
    {

        newnode->data=x;
        newnode->next=NULL;
     
  • 21
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是使用C语言实现二叉树层次遍历的代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; } TreeNode; typedef struct QueueNode { TreeNode *node; struct QueueNode *next; } QueueNode; typedef struct Queue { QueueNode *front; QueueNode *rear; } Queue; Queue *createQueue() { Queue *queue = (Queue *) malloc(sizeof(Queue)); queue->front = NULL; queue->rear = NULL; return queue; } int isQueueEmpty(Queue *queue) { return queue->front == NULL; } void enqueue(Queue *queue, TreeNode *node) { QueueNode *newNode = (QueueNode *) malloc(sizeof(QueueNode)); newNode->node = node; newNode->next = NULL; if (queue->rear) { queue->rear->next = newNode; queue->rear = newNode; } else { queue->front = newNode; queue->rear = newNode; } } TreeNode *dequeue(Queue *queue) { if (isQueueEmpty(queue)) { return NULL; } QueueNode *node = queue->front; queue->front = node->next; if (!queue->front) { queue->rear = NULL; } TreeNode *treeNode = node->node; free(node); return treeNode; } void levelOrder(TreeNode *root) { if (!root) { return; } Queue *queue = createQueue(); enqueue(queue, root); while (!isQueueEmpty(queue)) { int levelSize = queueSize(queue); for (int i = 0; i < levelSize; i++) { TreeNode *node = dequeue(queue); printf("%d ", node->val); if (node->left) { enqueue(queue, node->left); } if (node->right) { enqueue(queue, node->right); } } printf("\n"); } } int main() { TreeNode *root = (TreeNode *) malloc(sizeof(TreeNode)); TreeNode *node1 = (TreeNode *) malloc(sizeof(TreeNode)); TreeNode *node2 = (TreeNode *) malloc(sizeof(TreeNode)); TreeNode *node3 = (TreeNode *) malloc(sizeof(TreeNode)); TreeNode *node4 = (TreeNode *) malloc(sizeof(TreeNode)); root->val = 3; node1->val = 9; node2->val = 20; node3->val = 15; node4->val = 7; root->left = node1; root->right = node2; node2->left = node3; node2->right = node4; node1->left = NULL; node1->right = NULL; node3->left = NULL; node3->right = NULL; node4->left = NULL; node4->right = NULL; levelOrder(root); return 0; } ``` 这段代码中,我们定义了一个 `TreeNode` 结构体来表示二叉树节点,定义了一个 `QueueNode` 结构体来表示队列节点,定义了一个 `Queue` 结构体来表示队列。我们使用 `createQueue` 函数创建一个队列,使用 `enqueue` 和 `dequeue` 函数来实现队列的入队和出队操作,并使用 `isQueueEmpty` 函数来判断队列是否为空。我们使用 `levelOrder` 函数来实现二叉树层次遍历,其中使用队列来辅助遍历。在 `main` 函数中,我们构建了一棵二叉树,并调用 `levelOrder` 函数来进行层次遍历

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值