C语言二叉树进行先序遍历,并打印层号
时间: 2023-06-13 12:04:52 浏览: 115
以下是C语言实现二叉树先序遍历并打印层号的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 获取二叉树的深度
int getDepth(TreeNode* root) {
if (!root) {
return 0;
}
int leftDepth = getDepth(root->left);
int rightDepth = getDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
// 先序遍历并打印层号
void preOrder(TreeNode* root, int level) {
if (!root) {
return;
}
printf("Level %d: %d\n", level, root->val);
preOrder(root->left, level + 1);
preOrder(root->right, level + 1);
}
int main() {
// 创建二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->right->val = 3;
root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
root->left->left->val = 4;
root->left->right->val = 5;
root->left->left->left = NULL;
root->left->left->right = NULL;
root->left->right->left = NULL;
root->left->right->right = NULL;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 6;
root->right->right->val = 7;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 获取二叉树深度并遍历
int depth = getDepth(root);
preOrder(root, 1);
// 释放二叉树节点内存
free(root->left->left);
free(root->left->right);
free(root->right->left);
free(root->right->right);
free(root->left);
free(root->right);
free(root);
return 0;
}
```
以上代码中,我们先定义了二叉树的结构体 `TreeNode`,其中包含节点值 `val`、左子树 `left` 和右子树 `right` 三个成员变量。接着,我们实现了获取二叉树深度的函数 `getDepth`,使用递归的方式计算左右子树深度并返回较大值加一。最后,我们实现了先序遍历并打印层号的函数 `preOrder`,使用递归的方式遍历二叉树,并在打印节点值前输出当前层号。
在 `main` 函数中,我们手动创建了一个二叉树,并通过调用 `getDepth` 函数获取其深度,再调用 `preOrder` 函数进行先序遍历并打印层号。最后,我们释放了二叉树所有节点的内存。
阅读全文