用C语言编写二叉树的递归遍历程序,实现:给定一棵二叉树的“扩展先序遍历序列”,创建这棵 二叉树 (1)输出二叉树的先序遍历的结点序列。 (2)输出二叉树的后序遍历的结点序列。 (3)输出二叉树的中序遍历的结点序列。 (4)输出二叉树的叶子结点。 (5)统计二叉树的结点个数。
时间: 2024-05-01 22:20:22 浏览: 106
非常感谢您的提问。以下是C语言实现二叉树递归遍历的程序,并按要求输出结果。
```
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树(根据扩展先序遍历序列)
TreeNode *createTree() {
char c;
scanf("%c", &c);
if(c == '#') {
return NULL;
}
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = c;
root->left = createTree();
root->right = createTree();
return root;
}
// 先序遍历
void preOrder(TreeNode *root) {
if(root == NULL) {
return;
}
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
// 后序遍历
void postOrder(TreeNode *root) {
if(root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
// 中序遍历
void inOrder(TreeNode *root) {
if(root == NULL) {
return;
}
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
// 输出叶子结点
void leafNodes(TreeNode *root) {
if(root == NULL) {
return;
}
if(root->left == NULL && root->right == NULL) {
printf("%c ", root->data);
}
leafNodes(root->left);
leafNodes(root->right);
}
// 统计结点个数
int countNodes(TreeNode *root) {
if(root == NULL) {
return 0;
}
return countNodes(root->left) + countNodes(root->right) + 1;
}
int main() {
printf("请输入二叉树的扩展先序遍历序列(#表示空结点):\n");
TreeNode *root = createTree();
printf("先序遍历结果:");
preOrder(root);
printf("\n后序遍历结果:");
postOrder(root);
printf("\n中序遍历结果:");
inOrder(root);
printf("\n叶子结点为:");
leafNodes(root);
printf("\n结点个数为:%d\n", countNodes(root));
return 0;
}
```
您可以将上面的代码保存为一个名为 `binary_tree.c` 的文件中,并使用 `gcc` 编译器编译运行:
```
gcc binary_tree.c -o binary_tree
./binary_tree
```
输入扩展先序遍历序列后,程序会按要求输出先序遍历、后序遍历、中序遍历、叶子结点和结点个数的结果。
阅读全文