内容: 1. 创建二叉树的二叉链表。 2. 实现二叉树的3种遍历递归算法。 步骤: 1. 创建二叉树二叉链表的结点类型,如下: typedef struct node { char data; struct node *lchild,*rchild; }BTNode; 2. 输入二叉树的先序序列,创建二叉树:输入先序序列,输出指向二叉链表的根结点的指针 BTNode *creatBiTree(char *str); 二叉树的层序遍历: void Dipbtnode(BTNode *b); 3. 实现二叉树的3种遍历递归算法 先序递归算法 void PreOrder1(BTNode *b); 中序递归算法 void InOrder1(BTNode *b); 后序递归算法 void PostOrder1(BTNode *b);
时间: 2024-02-09 10:09:59 浏览: 89
以下是C语言实现二叉树的二叉链表、层序遍历和三种遍历递归算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点的结构体
typedef struct node {
char data;
struct node *lchild;
struct node *rchild;
} BTNode;
// 创建二叉树
BTNode *creatBiTree(char *str) {
static int i = 0;
BTNode *p;
if (str[i] == '\0') {
return NULL;
} else {
if (str[i] == '#') {
p = NULL;
i++;
} else {
p = (BTNode *)malloc(sizeof(BTNode));
p->data = str[i];
i++;
p->lchild = creatBiTree(str);
p->rchild = creatBiTree(str);
}
}
return p;
}
// 层序遍历
void levelOrder(BTNode *root) {
if (root == NULL) {
return;
}
BTNode *queue[100];
int front = 0, rear = 0;
queue[rear++] = root;
while (front != rear) {
BTNode *p = queue[front++];
printf("%c", p->data);
if (p->lchild != NULL) {
queue[rear++] = p->lchild;
}
if (p->rchild != NULL) {
queue[rear++] = p->rchild;
}
}
}
// 先序遍历
void PreOrder1(BTNode *b) {
if (b != NULL) {
printf("%c", b->data);
PreOrder1(b->lchild);
PreOrder1(b->rchild);
}
}
// 中序遍历
void InOrder1(BTNode *b) {
if (b != NULL) {
InOrder1(b->lchild);
printf("%c", b->data);
InOrder1(b->rchild);
}
}
// 后序遍历
void PostOrder1(BTNode *b) {
if (b != NULL) {
PostOrder1(b->lchild);
PostOrder1(b->rchild);
printf("%c", b->data);
}
}
int main() {
char str[] = "AB#D##CE##F##";
BTNode *root = creatBiTree(str);
printf("层序遍历结果:");
levelOrder(root);
printf("\n先序遍历结果:");
PreOrder1(root);
printf("\n中序遍历结果:");
InOrder1(root);
printf("\n后序遍历结果:");
PostOrder1(root);
return 0;
}
```
以上是一个实现二叉树的二叉链表、层序遍历和三种遍历递归算法的C语言代码,你可以在本地编译运行查看结果。
阅读全文