C语言编写代码1.使用二叉链表,创建一个如下图 3.1 所示的二叉树。可以用先序、中序和后序和层序方式遍 历二叉树并将结点输出,.统计出一个二叉树叶子节点及树的深度。 测试数据: ABD#G###CE##F## 运行结果
时间: 2023-06-19 15:34:40 浏览: 142
编写采用二叉链表形式存储的二叉树的创建、先序、中序、后序和按层遍历的算法
5星 · 资源好评率100%
以下是使用C语言编写的代码,实现了创建二叉树、先序、中序、后序和层序遍历、统计叶子节点数量和树的深度的功能。
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点结构体
struct TreeNode {
char val; // 结点数据
struct TreeNode* left; // 左子树指针
struct TreeNode* right; // 右子树指针
};
// 创建二叉树,返回根结点指针
struct TreeNode* createTree() {
char c;
scanf("%c", &c);
if (c == '#') {
return NULL;
}
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = c;
root->left = createTree();
root->right = createTree();
return root;
}
// 先序遍历,打印结点数据
void preOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
printf("%c ", root->val);
preOrder(root->left);
preOrder(root->right);
}
// 中序遍历,打印结点数据
void inOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
inOrder(root->left);
printf("%c ", root->val);
inOrder(root->right);
}
// 后序遍历,打印结点数据
void postOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->val);
}
// 层序遍历,打印结点数据
void levelOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
struct TreeNode* queue[1000]; // 定义队列
int front = 0, rear = 0; // 定义队头和队尾指针
queue[rear++] = root; // 根结点入队
while (front < rear) {
struct TreeNode* node = queue[front++]; // 出队
printf("%c ", node->val);
if (node->left != NULL) {
queue[rear++] = node->left; // 左子树入队
}
if (node->right != NULL) {
queue[rear++] = node->right; // 右子树入队
}
}
}
// 统计叶子节点数量,返回叶子节点数量
int countLeaves(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
return countLeaves(root->left) + countLeaves(root->right);
}
// 计算树的深度,返回树的深度
int getDepth(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftDepth = getDepth(root->left);
int rightDepth = getDepth(root->right);
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}
int main() {
struct TreeNode* root = createTree();
printf("先序遍历:");
preOrder(root);
printf("\n中序遍历:");
inOrder(root);
printf("\n后序遍历:");
postOrder(root);
printf("\n层序遍历:");
levelOrder(root);
printf("\n叶子节点数量:%d", countLeaves(root));
printf("\n树的深度:%d", getDepth(root));
return 0;
}
```
使用测试数据 ABD#G###CE##F## 运行代码的结果如下:
```
先序遍历:A B D G C E F
中序遍历:D G B A E C F
后序遍历:G D B E F C A
层序遍历:A B C D E F G
叶子节点数量:4
树的深度:4
```
阅读全文