二叉树的三种遍历图解

二叉树的三种基本遍历顺序:

这里写图片描述
这里写图片描述
这里写图片描述

二叉树的层次遍历可以使用队列来实现。具体步骤如下: 1. 将根节点入队。 2. 当队列不为空时,执行以下操作: - 将队首节点出队,并访问该节点。 - 如果该节点有左子节点,则将左子节点入队。 - 如果该节点有右子节点,则将右子节点入队。 以下是C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> // 二叉树结点的定义 typedef struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 队列结点的定义 typedef struct QueueNode { TreeNode *data; struct QueueNode *next; } QueueNode; // 队列的定义 typedef struct Queue { QueueNode *front; QueueNode *rear; } Queue; // 初始化队列 void initQueue(Queue *q) { q->front = q->rear = NULL; } // 判断队列是否为空 int isEmpty(Queue *q) { return q->front == NULL; } // 入队 void enqueue(Queue *q, TreeNode *data) { QueueNode *newNode = (QueueNode *)malloc(sizeof(QueueNode)); newNode->data = data; newNode->next = NULL; if (isEmpty(q)) { q->front = q->rear = newNode; } else { q->rear->next = newNode; q->rear = newNode; } } // 出队 TreeNode *dequeue(Queue *q) { if (isEmpty(q)) { return NULL; } TreeNode *data = q->front->data; QueueNode *temp = q->front; q->front = q->front->next; free(temp); return data; } // 层次遍历 void levelOrder(TreeNode *root) { if (root == NULL) { return; } Queue q; initQueue(&q); enqueue(&q, root); while (!isEmpty(&q)) { TreeNode *node = dequeue(&q); printf("%d ", node->val); if (node->left != NULL) { enqueue(&q, node->left); } if (node->right != NULL) { enqueue(&q, node->right); } } } // 创建二叉树 TreeNode *createTree() { int val; scanf("%d", &val); if (val == -1) { return NULL; } TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode)); root->val = val; root->left = createTree(); root->right = createTree(); return root; } int main() { TreeNode *root = createTree(); levelOrder(root); return 0; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值