1、二叉树的定义、建立、遍历函数(先中后)和释放操作函数,并利用这些操作完成: 2、以字符串的形式定义一棵二叉树:根 左子树 右子树 例如: 可用AB□C□□D□□进行定义。 首先根据二叉树的字符串定义建立一棵二叉链表树,然后按中序遍历这棵二叉树输出每个结点上的字母,最后按照后序遍历的释放这棵二叉树。
时间: 2024-03-13 17:42:48 浏览: 45
下面是完整的 C 代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点的结构体定义
typedef struct TreeNode {
char val; // 结点的值
struct TreeNode* left; // 左子树指针
struct TreeNode* right; // 右子树指针
} TreeNode;
// 二叉树的创建函数
TreeNode* createTree(char* str, int* index) {
if (str[*index] == '\0' || str[*index] == '□') {
return NULL;
}
TreeNode* root = (TreeNode*) malloc(sizeof(TreeNode));
root->val = str[*index];
(*index)++;
root->left = createTree(str, index);
(*index)++;
root->right = createTree(str, index);
return root;
}
// 二叉树的中序遍历函数
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%c ", root->val);
inorderTraversal(root->right);
}
// 二叉树的先序遍历函数
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%c ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
// 二叉树的后序遍历函数
void postorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%c ", root->val);
}
// 二叉树的释放函数
void freeTree(TreeNode* root) {
if (root == NULL) {
return;
}
freeTree(root->left);
freeTree(root->right);
free(root);
}
int main() {
char str[] = "AB□C□□D□□"; // 二叉树的字符串定义
int index = 0;
TreeNode* root = createTree(str, &index); // 创建二叉树
printf("中序遍历结果:");
inorderTraversal(root); // 中序遍历二叉树
printf("\n");
printf("先序遍历结果:");
preorderTraversal(root); // 先序遍历二叉树
printf("\n");
printf("后序遍历结果:");
postorderTraversal(root); // 后序遍历二叉树
printf("\n");
freeTree(root); // 释放二叉树
return 0;
}
```
该程序中,我们首先将二叉树的字符串定义作为参数传递给 `createTree` 函数,利用递归的方式创建了一棵二叉树。然后我们分别调用 `inorderTraversal`、`preorderTraversal` 和 `postorderTraversal` 函数,按中序、先序和后序的方式遍历二叉树并输出每个结点上的字母。最后我们调用 `freeTree` 函数释放二叉树的内存空间,避免内存泄漏。
阅读全文