C语言编程实现二叉树的创建,先序中序后序递归遍历显示,空间释放
时间: 2024-10-17 07:07:39 浏览: 34
数据结构试验报告用先序中序建立二叉树后序遍历非递归.pdf
5星 · 资源好评率100%
在C语言中,我们可以使用结构体来表示二叉树节点,并通过递归函数实现先序、中序和后序遍历。这里是一个简单的示例:
首先,定义一个二叉树节点结构体:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
然后,我们创建一个二叉树的基本操作(例如插入一个新节点):
```c
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode != NULL) {
newNode->val = val;
newNode->left = newNode->right = NULL;
}
return newNode;
}
// 插入节点到给定位置
TreeNode* insert(TreeNode* root, int val) {
if (root == NULL) {
return createNode(val);
}
if (val < root->val) {
root->left = insert(root->left, val);
} else {
root->right = insert(root->right, val);
}
return root;
}
```
接下来,实现三种遍历算法(递归版本):
1. 先序遍历(根-左-右):
```c
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 输出节点值
preOrderTraversal(root->left); // 遍历左子树
preOrderTraversal(root->right); // 遍历右子树
}
}
```
2. 中序遍历(左-根-右):
```c
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left); // 遍历左子树
printf("%d ", root->val); // 输出节点值
inOrderTraversal(root->right); // 遍历右子树
}
}
```
3. 后序遍历(左-右-根):
```c
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left); // 遍历左子树
postOrderTraversal(root->right); // 遍历右子树
printf("%d ", root->val); // 输出节点值
}
}
```
最后,记得在完成遍历后释放内存,特别是手动管理内存的情况下:
```c
// 删除整个树并释放内存
void destroyTree(TreeNode** root) {
if (*root != NULL) {
destroyTree(&(*root)->left);
destroyTree(&(*root)->right);
free(*root);
*root = NULL;
}
}
```
你可以根据需要在适当的时候调用`destroyTree(&root)`来清理内存。
阅读全文