用C语言从键盘读入字符(数字、字母或其他符号)建立一个深度不小于3的二叉树的二叉链表存储结构,然后①分别递归先序、中序和后序遍历二叉树并输出相应的遍历二叉树结点序列;②统计二叉树中结点总数;③求二叉树的深度;④统计二叉树的叶子节点数。
时间: 2024-01-23 13:40:10 浏览: 74
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 递归建立二叉树
TreeNode *createTree() {
char ch;
scanf("%c", &ch);
if (ch == '#') {
return NULL;
} else {
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->data = ch;
root->left = createTree();
root->right = createTree();
return root;
}
}
// 先序遍历二叉树
void preOrder(TreeNode *root) {
if (root) {
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
}
// 中序遍历二叉树
void inOrder(TreeNode *root) {
if (root) {
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
}
// 后序遍历二叉树
void postOrder(TreeNode *root) {
if (root) {
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
}
// 统计二叉树结点总数
int countNodes(TreeNode *root) {
if (root) {
return 1 + countNodes(root->left) + countNodes(root->right);
} else {
return 0;
}
}
// 求二叉树的深度
int depth(TreeNode *root) {
if (root) {
int leftDepth = depth(root->left);
int rightDepth = depth(root->right);
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
} else {
return 0;
}
}
// 统计二叉树的叶子节点数
int countLeaves(TreeNode *root) {
if (root) {
if (!root->left && !root->right) {
return 1;
} else {
return countLeaves(root->left) + countLeaves(root->right);
}
} else {
return 0;
}
}
int main() {
printf("请输入一棵二叉树(#表示空节点):\n");
TreeNode *root = createTree();
printf("先序遍历结果为:");
preOrder(root);
printf("\n");
printf("中序遍历结果为:");
inOrder(root);
printf("\n");
printf("后序遍历结果为:");
postOrder(root);
printf("\n");
printf("二叉树结点总数为:%d\n", countNodes(root));
printf("二叉树的深度为:%d\n", depth(root));
printf("二叉树的叶子节点数为:%d\n", countLeaves(root));
return 0;
}
```
样例输入:
```
A
B
#
#
C
D
#
#
E
#
#
```
样例输出:
```
先序遍历结果为:A B C D E
中序遍历结果为:B A D C E
后序遍历结果为:B D E C A
二叉树结点总数为:5
二叉树的深度为:3
二叉树的叶子节点数为:3
```
阅读全文