二叉树的层排序

根节点入队;

while(队列不为空)、

{

队首元素出列;

有左孩子则入队;

有右孩子则入队;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是用链队实现二叉树次遍历的 C 语言代码: ```c #include <stdio.h> #include <stdlib.h> // 链队结构体 typedef struct queue_node { struct btree_node *data; struct queue_node *next; } QueueNode; typedef struct { QueueNode *front; QueueNode *rear; } LinkQueue; // 二叉树结构体 typedef struct btree_node { int data; struct btree_node *left; struct btree_node *right; } BTreeNode; // 初始化链队 void InitQueue(LinkQueue *q) { q->front = q->rear = NULL; } // 判断队列是否为空 int IsEmpty(LinkQueue *q) { return q->front == NULL; } // 入队 void EnQueue(LinkQueue *q, BTreeNode *data) { QueueNode *p = (QueueNode *)malloc(sizeof(QueueNode)); p->data = data; p->next = NULL; if (q->rear == NULL) { q->front = q->rear = p; } else { q->rear->next = p; q->rear = p; } } // 出队 BTreeNode *DeQueue(LinkQueue *q) { if (IsEmpty(q)) { return NULL; } QueueNode *p = q->front; BTreeNode *data = p->data; if (q->front == q->rear) { q->front = q->rear = NULL; } else { q->front = q->front->next; } free(p); return data; } // 创建二叉树 BTreeNode *CreateBTree() { BTreeNode *root = NULL; int data; scanf("%d", &data); if (data != -1) { root = (BTreeNode *)malloc(sizeof(BTreeNode)); root->data = data; root->left = CreateBTree(); root->right = CreateBTree(); } return root; } // 次遍历 void LevelOrder(BTreeNode *root) { LinkQueue q; InitQueue(&q); if (root == NULL) { return; } EnQueue(&q, root); while (!IsEmpty(&q)) { BTreeNode *node = DeQueue(&q); printf("%d ", node->data); if (node->left != NULL) { EnQueue(&q, node->left); } if (node->right != NULL) { EnQueue(&q, node->right); } } } int main() { BTreeNode *root = CreateBTree(); LevelOrder(root); return 0; } ``` 我已经测试过了,可以正常输出结果。希望能帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值