void Preorder(BiTree T) { if(T) { printf(" %c",T->data); Preorder(T->lchild); Preorder(T->rchild); } } void Inorder(BiTree T) { if(T) { Inorder(T->lchild); printf(" %c",T->data); Inorder(T->rchild); } } void Postorder(BiTree T) { if(T) { Postorder(T->lchild); Postorder(T->rchild); printf(" %c",T->data); } }
时间: 2023-12-30 15:06:02 浏览: 23
这是三种二叉树遍历的代码,分别是先序遍历、中序遍历和后序遍历。这些遍历方式都是树的深度优先遍历方式,只是遍历顺序不同。
先序遍历:先访问根节点,再依次访问左子树和右子树。
中序遍历:先访问左子树,再访问根节点,最后访问右子树。
后序遍历:先访问左子树,再访问右子树,最后访问根节点。
这些遍历方式在二叉树的操作中经常用到,可以通过这些遍历方式输出二叉树的结构,查找特定节点等等。
相关问题
C语言void PreOrder(BiTree T) { if (T == NULL) { return; } i1=T->data; printf("%c ", T->data); PreOrder(T->lchild); PreOrder(T->rchild); }怎么把前序序列的结果存储到一个变量中
可以使用一个数组来存储前序遍历的结果。首先,在主函数中定义一个数组:
```
char preOrder[100];
```
然后,将数组作为参数传入`PreOrder`函数中,并将遍历到的节点的值存储到数组中。修改后的代码如下:
```
void PreOrder(BiTree T, char* preOrder, int* index) {
if (T == NULL) {
return;
}
preOrder[*index] = T->data;
(*index)++;
PreOrder(T->lchild, preOrder, index);
PreOrder(T->rchild, preOrder, index);
}
```
其中,`preOrder`表示存储前序遍历结果的数组,`index`表示当前遍历到的节点在数组中的下标。
最后,在主函数中调用`PreOrder`函数并打印结果:
```
int main() {
BiTree T = createTree(); // 创建二叉树
char preOrder[100];
int index = 0;
PreOrder(T, preOrder, &index); // 前序遍历
preOrder[index] = '\0'; // 在数组末尾添加'\0',表示字符串结束
printf("%s\n", preOrder); // 打印前序遍历结果
return 0;
}
```
注意,这里需要在数组末尾添加`'\0'`,表示字符串结束,才能使用`printf`函数打印结果。
#include <stdio.h> #include <stdlib.h> typedef char ElementType; typedef struct BiTNode{ ElementType data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode,*BiTree; BiTree CreatBinTree(); void preorder( BiTree T ); int main() { BiTree T = CreatBinTree(); preorder( T ); return 0; } void preorder( BiTree T ) { if(T) { printf("%c",T->data); preorder(T->lchild); preorder(T->rchild); } } BiTree CreatBinTree() { char ch;BiTree T; scanf("%c",&ch); if(ch=='#') return 1 分 ; T= 1 分 ; T->data=ch; T->lchild= 1 分 ; T->rchild= 1 分 ; return T; }
这段代码实现了二叉树的创建和先序遍历。
具体来说,代码中定义了二叉树结构体 BiTNode,并通过 typedef 定义了 BiTree 为指向 BiTNode 的指针类型。其中,BiTNode 中包含了数据元素 data 和指向左右子树的指针 lchild 和 rchild。
函数 CreatBinTree() 实现了二叉树的创建。它从标准输入中读取字符 ch,如果 ch 为 #,则返回 NULL 表示该节点为空;否则创建一个新的节点 T,并将其 data 成员设置为 ch。然后递归调用 CreatBinTree(),将返回值赋给 T 的 lchild 和 rchild 成员,分别代表其左右子树。
函数 preorder() 实现了先序遍历。如果当前节点 T 不为空,则先输出其数据元素,然后递归遍历其左右子树。
在 main() 中,先调用 CreatBinTree() 创建二叉树,然后调用 preorder() 进行先序遍历。
需要注意的是,代码中存在一些未定义的符号,比如 # 和 1 分。这可能是因为在复制代码时发生了错误。