创建二叉树,插入的结点数据类型为字符(如abcdefg),实现二叉树的先序、中序和后续遍历,实现二叉树叶子结点的计算函数,打印先序、中序和后续序列以及叶子结点数。
时间: 2024-05-07 10:16:54 浏览: 80
好的,我明白了。对于你的问题,我可以给你一个基本的二叉树的实现代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char data;
struct node* left;
struct node* right;
}Node;
Node* createNode(char data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
Node* insertNode(Node* root, char data) {
if (root == NULL) {
root = createNode(data);
}
else if (data <= root->data) {
root->left = insertNode(root->left, data);
}
else {
root->right = insertNode(root->right, data);
}
return root;
}
void preorderTraversal(Node* root) {
if (root == NULL) return;
printf("%c ", root->data);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
void inorderTraversal(Node* root) {
if (root == NULL) return;
inorderTraversal(root->left);
printf("%c ", root->data);
inorderTraversal(root->right);
}
void postorderTraversal(Node* root) {
if (root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%c ", root->data);
}
int leafNodeCount(Node* root) {
if (root == NULL) return 0;
if (root->left == NULL && root->right == NULL) return 1;
return leafNodeCount(root->left) + leafNodeCount(root->right);
}
int main() {
Node* root = NULL;
root = insertNode(root, 'f');
insertNode(root, 'b');
insertNode(root, 'a');
insertNode(root, 'd');
insertNode(root, 'c');
insertNode(root, 'e');
insertNode(root, 'g');
printf("Preorder traversal: ");
preorderTraversal(root);
printf("\n");
printf("Inorder traversal: ");
inorderTraversal(root);
printf("\n");
printf("Postorder traversal: ");
postorderTraversal(root);
printf("\n");
printf("Leaf node count: %d\n", leafNodeCount(root));
return 0;
}
```
这个程序可以创建一个二叉树,并实现二叉树的先序、中序、后续遍历,以及叶子结点的计数,也能打印出先序、中序、后续序列和叶子结点的数量。
你可以运行这个程序,看一下输出结果,如果有任何问题,可以继续问我。
阅读全文