用c语言创建二叉树,分别用先序,中序,后序遍历输出ABCDEFG,并求该二叉树的节点数
时间: 2024-10-25 21:07:03 浏览: 20
C语言实现二叉树的中序遍历(非递归)
在C语言中,我们可以使用结构体来表示二叉树节点,并使用递归的方式实现先序、中序和后序遍历。首先,我们创建一个简单的二叉树节点结构:
```c
#include <stdio.h>
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
接下来,我们定义函数来构建树并完成遍历:
```c
// 创建新节点
TreeNode* createNode(char value) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->left = newNode->right = NULL;
return newNode;
}
// 先序遍历(根-左-右)
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%c ", root->data);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
}
// 中序遍历(左-根-右)
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%c ", root->data);
inOrderTraversal(root->right);
}
}
// 后序遍历(左-右-根)
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
printf("%c ", root->data);
}
}
// 构建特定顺序的二叉树
void buildTree(TreeNode** root, const char values[], int start, int end) {
if (start > end) return;
int mid = (start + end) / 2;
TreeNode* node = createNode(values[mid]);
node->left = buildTree(&node->left, values, start, mid - 1);
node->right = buildTree(&node->right, values, mid + 1, end);
return node;
}
int main() {
char values[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
int n = sizeof(values) / sizeof(values[0]);
TreeNode* root = buildTree(&root, values, 0, n - 1);
// 遍历并打印结果
printf("Preorder traversal: ");
preOrderTraversal(root);
printf("\nInorder traversal: ");
inOrderTraversal(root);
printf("\nPostorder traversal: ");
postOrderTraversal(root);
// 计算节点数
int count = 0;
void* ptr = root;
while (ptr) {
count++;
ptr = ptr->left ? ptr->left : ptr->right;
}
printf("\nThe tree has %d nodes.\n", count);
return 0;
}
```
上述代码首先构建了一个特定顺序(如先输入A到G)的二叉树,然后分别进行了先序、中序和后序遍历,最后计算并输出了节点总数。注意,实际应用中需要处理内存分配失败的情况。
阅读全文