用c语言使用链式存储结构创建二叉树(由用户输入二叉树各节点的值),用递归算法分别实现二叉树的先序遍历中序遍历和后续遍历,是否二叉树的动态内存空间
时间: 2023-12-01 22:19:29 浏览: 117
好的,以下是使用链式存储结构创建二叉树并实现遍历的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点定义
typedef struct BTNode {
int data; // 结点数据
struct BTNode *lchild; // 左孩子结点指针
struct BTNode *rchild; // 右孩子结点指针
} BTNode, *BTree;
// 创建二叉树
void CreateBTree(BTree *T) {
int data;
scanf("%d", &data);
if (data == -1) { // 如果输入-1则表示该结点为空
*T = NULL;
} else {
*T = (BTree)malloc(sizeof(BTNode)); // 申请新结点空间
(*T)->data = data;
CreateBTree(&((*T)->lchild)); // 递归创建左子树
CreateBTree(&((*T)->rchild)); // 递归创建右子树
}
}
// 先序遍历二叉树
void PreorderTraversal(BTree T) {
if (T) {
printf("%d ", T->data); // 输出结点数据
PreorderTraversal(T->lchild); // 先序遍历左子树
PreorderTraversal(T->rchild); // 先序遍历右子树
}
}
// 中序遍历二叉树
void InorderTraversal(BTree T) {
if (T) {
InorderTraversal(T->lchild); // 中序遍历左子树
printf("%d ", T->data); // 输出结点数据
InorderTraversal(T->rchild); // 中序遍历右子树
}
}
// 后序遍历二叉树
void PostorderTraversal(BTree T) {
if (T) {
PostorderTraversal(T->lchild); // 后序遍历左子树
PostorderTraversal(T->rchild); // 后序遍历右子树
printf("%d ", T->data); // 输出结点数据
}
}
int main() {
BTree T;
printf("请输入二叉树的各结点数据(-1表示空结点):\n");
CreateBTree(&T);
printf("先序遍历结果为:");
PreorderTraversal(T);
printf("\n中序遍历结果为:");
InorderTraversal(T);
printf("\n后序遍历结果为:");
PostorderTraversal(T);
printf("\n");
return 0;
}
```
以上代码中,我们使用了动态内存空间创建二叉树,即通过 `malloc()` 函数申请新结点的内存空间。使用动态内存空间可以避免静态内存空间大小固定的限制,同时也可以更加灵活地管理内存空间。需要注意的是,在使用完动态分配的内存空间后需要手动释放内存,以免造成内存泄漏。
阅读全文
相关推荐















