C语言层次遍历,递归实现
时间: 2023-09-03 17:27:30 浏览: 174
### 回答1:
在 C 语言中,可以使用递归的方式来实现二叉树的层次遍历。
层次遍历是指按照树的层级来遍历树的节点。对于每一层的节点,都是从左到右依次遍历。
下面是一个递归实现的层次遍历函数的示例:
```
void levelOrder(struct TreeNode* root) {
if (root == NULL) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
printf("%d ", node->val);
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
```
在这个函数中,我们使用了一个队列来保存每一层的节点。每次从队列的头部取出一个节点,然后将它的左右子节点压入队列。这样,就能保证每一层的节点是从左到右依次遍历的。
希望这个回答能帮到你!
### 回答2:
C语言中使用递归来实现层次遍历可以按照以下步骤进行:
1. 定义一个二叉树结构体,并编写创建二叉树的函数。
2. 定义一个辅助函数来计算树的层数(即树的高度)。
3. 编写递归函数来执行层次遍历。该函数需要传入当前节点、当前层数以及目标层数。每次递归,先判断当前层数是否等于目标层数,如果相等则输出当前节点的值。如果不相等,则继续递归遍历当前节点的左子树和右子树,同时将目标层数加一。
4. 在主函数中,首先创建二叉树,并传入根节点和目标层数1(起始层数为1)。然后调用递归函数进行层次遍历。
代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树
TreeNode* createTree(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 计算树的层数
int calculateHeight(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftHeight = calculateHeight(root->left);
int rightHeight = calculateHeight(root->right);
return (leftHeight > rightHeight) ? leftHeight + 1 : rightHeight + 1;
}
// 递归层次遍历
void levelOrderTraversal(TreeNode* node, int currentHeight, int targetHeight) {
if (node == NULL) {
return;
}
if (currentHeight == targetHeight) {
printf("%d ", node->val);
}
levelOrderTraversal(node->left, currentHeight + 1, targetHeight);
levelOrderTraversal(node->right, currentHeight + 1, targetHeight);
}
int main() {
// 创建二叉树
TreeNode* root = createTree(1);
root->left = createTree(2);
root->right = createTree(3);
root->left->left = createTree(4);
root->left->right = createTree(5);
root->right->left = createTree(6);
root->right->right = createTree(7);
// 计算树的层数
int height = calculateHeight(root);
// 递归层次遍历
for (int i = 1; i <= height; i++) {
levelOrderTraversal(root, 1, i);
}
return 0;
}
```
以上代码可以输出二叉树的层次遍历结果。
### 回答3:
层次遍历又称广度优先遍历,是一种按照树的层次顺序遍历所有节点的方法。递归实现层次遍历算法有点复杂,但可以通过借助队列的方式来实现。以下是C语言中使用递归实现层次遍历的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 层次遍历函数
void levelOrderTraversal(Node* root, int level) {
if (root == NULL) {
return;
}
if (level == 1) {
printf("%d ", root->data);
} else if (level > 1) {
levelOrderTraversal(root->left, level - 1);
levelOrderTraversal(root->right, level - 1);
}
}
// 获取树的高度(层数)
int getHeight(Node* root) {
if (root == NULL) {
return 0;
}
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
}
int main() {
// 创建测试二叉树
Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 获取树的高度
int height = getHeight(root);
// 递归实现层次遍历
for (int i = 1; i <= height; i++) {
levelOrderTraversal(root, i);
}
return 0;
}
```
运行以上代码,就可以实现递归方式的层次遍历。结果将打印出树的每个节点的值,按照层次顺序依次输出。
阅读全文