#include <stdio.h> #include <stdlib.h> #define LEN sizeof(tree) typedef struct BiTNode { int data; struct BiTNode* lchild; struct BiTNode* rchild; } tree; void CreatTree(tree** root) { int t; scanf("%d", &t); if (t == 0) { *root = NULL; return; } else { *root = (tree*)malloc(LEN); (*root)->data = t; printf("\n输入%d的左孩子:", (*root)->data); CreatTree(&((*root)->lchild)); printf("输入%d的右孩子:", (*root)->data); CreatTree(&((*root)->rchild)); }}void ClearTree(tree** root) { if (*root == NULL) return; else { ClearTree(&((*root)->lchild)); ClearTree(&((*root)->rchild)); free(*root); *root = NULL; }}// 先序遍历 void preorder(tree* root) { if (root == NULL) return; else { printf("%d ", root->data); preorder(root->lchild); preorder(root->rchild); }}// 中序遍历 void inorder(tree* root) { if (root == NULL) return; else { inorder(root->lchild); printf("%d ", root->data); inorder(root->rchild); }}// 后序遍历 void postorder(tree* root) { if (root == NULL) return; else { postorder(root->lchild); postorder(root->rchild); printf("%d ", root->data); }}int main() { tree* root = NULL; printf("输入根节点:"); CreatTree(&root); printf("%d ", root->data); printf("先序遍历:"); preorder(root); printf("\n中序遍历:"); inorder(root); printf("\n后序遍历:"); postorder(root); ClearTree(&root); return 0;}用c语言编写
时间: 2024-01-22 18:03:45 浏览: 59
这段代码是一个二叉树的创建和遍历程序,使用了C语言的动态内存分配和递归实现遍历功能。
```c
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(tree)
typedef struct BiTNode {
int data;
struct BiTNode* lchild;
struct BiTNode* rchild;
} tree;
void CreatTree(tree** root) {
int t;
scanf("%d", &t);
if (t == 0) {
*root = NULL;
return;
}
else {
*root = (tree*)malloc(LEN);
(*root)->data = t;
printf("\n输入%d的左孩子:", (*root)->data);
CreatTree(&((*root)->lchild));
printf("输入%d的右孩子:", (*root)->data);
CreatTree(&((*root)->rchild));
}
}
void ClearTree(tree** root) {
if (*root == NULL)
return;
else {
ClearTree(&((*root)->lchild));
ClearTree(&((*root)->rchild));
free(*root);
*root = NULL;
}
}
// 先序遍历
void preorder(tree* root) {
if (root == NULL)
return;
else {
printf("%d ", root->data);
preorder(root->lchild);
preorder(root->rchild);
}
}
// 中序遍历
void inorder(tree* root) {
if (root == NULL)
return;
else {
inorder(root->lchild);
printf("%d ", root->data);
inorder(root->rchild);
}
}
// 后序遍历
void postorder(tree* root) {
if (root == NULL)
return;
else {
postorder(root->lchild);
postorder(root->rchild);
printf("%d ", root->data);
}
}
int main() {
tree* root = NULL;
printf("输入根节点:");
CreatTree(&root);
printf("%d ", root->data);
printf("先序遍历:");
preorder(root);
printf("\n中序遍历:");
inorder(root);
printf("\n后序遍历:");
postorder(root);
ClearTree(&root);
return 0;
}
```
阅读全文