A、类型定义二叉链表存储结构;p127B、基本操作1)创建一棵二叉树voidCreatBiTree(BiTree*T);p1311、提取用户输入值x; 2、判断用户输入值是否为#,3、若为#则建立空子树;4、若不为#,创建新的结点空间存储根结点,其data值为c,左子树,右子树递归调用CreatBiTree函数。2)二叉树的遍历判;p1291、二叉树的先序遍历:1)先访问并输出根节点,在采用相同方法递归遍历其左子树及右子树。2、二叉树的中序遍历;1)先递归遍历其左子树,后访问并输出根节点,最后采用相同方法递归遍历其右子树。3、二叉树的后序遍历:1)先递归遍历其左子树及右子树,后访问并输出根节点。C、主函数调用intmain()主函数调用(可参考实验二主函数调用示例)BiTreeT=NULL;//最开始T指向空
时间: 2023-12-10 10:39:26 浏览: 52
基于二叉链表构建二叉树.txt
这段代码是用来实现二叉树的创建和遍历的,其中包括了二叉链表存储结构的定义、创建一棵二叉树、提取用户输入值、判断用户输入值是否为#、二叉树的遍历等基本操作。
具体实现步骤如下:
1. 类型定义二叉链表存储结构:
```
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
```
定义了一个二叉树节点结构体,包括数据域data和左右子树指针lchild、rchild。同时定义了一个二叉树指针BiTree,指向二叉树的根节点。
2. 创建一棵二叉树:
```
void CreatBiTree(BiTree *T) {
char c;
scanf("%c", &c);
if (c == '#') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = c;
CreatBiTree(&(*T)->lchild);
CreatBiTree(&(*T)->rchild);
}
}
```
该函数用来创建一棵二叉树,其中参数T为指向二叉树根节点的指针。函数首先从用户输入中提取一个字符c,若c为#,则将当前节点置为空;若c不为#,则动态申请一个新的节点空间,存储根节点的值为c,然后递归调用CreatBiTree函数分别创建左右子树。
3. 二叉树的遍历:
```
void PreOrderTraverse(BiTree T) {
if (T) {
printf("%c ", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T) {
if (T) {
InOrderTraverse(T->lchild);
printf("%c ", T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T) {
if (T) {
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ", T->data);
}
}
```
这里实现了三种二叉树遍历方式:先序遍历、中序遍历和后序遍历。其中,递归遍历左右子树的顺序不同,从而实现了不同的遍历方式。
4. 主函数调用:
```
int main() {
BiTree T = NULL;
printf("请输入二叉树的先序遍历序列:\n");
CreatBiTree(&T);
printf("先序遍历结果为:");
PreOrderTraverse(T);
printf("\n中序遍历结果为:");
InOrderTraverse(T);
printf("\n后序遍历结果为:");
PostOrderTraverse(T);
printf("\n");
return 0;
}
```
在主函数中,首先将指向根节点的指针T初始化为空,然后通过调用CreatBiTree函数创建一棵二叉树。最后分别调用三种遍历函数,输出遍历结果。
阅读全文