用c++建立二叉树,并通过调用函数,输出先序遍历、中序遍历与后序遍历的结果。
时间: 2024-05-06 21:21:07 浏览: 90
好的,这是一个关于数据结构的问题,让我来为您解答。首先,我们需要定义一个二叉树的结构体:
```c
typedef struct BiNode {
char data; // 节点中存储的数据
struct BiNode *lchild, *rchild; // 左子节点和右子节点
} BiNode, *BiTree;
```
然后,我们可以编写一个函数生成一个二叉树:
```c
void createBiTree(BiTree *T) {
char c;
scanf("%c", &c); // 输入一个节点的数据
if (c == '#') { // 如果是 #,则表示该节点为空
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiNode)); // 为节点分配内存
(*T)->data = c; // 存储节点数据
createBiTree(&(*T)->lchild); // 创建左子节点
createBiTree(&(*T)->rchild); // 创建右子节点
}
}
```
接下来,我们可以编写函数分别输出二叉树的先序遍历、中序遍历和后序遍历:
```c
void preOrderTraverse(BiTree T) {
if (T == NULL) {
return;
}
printf("%c ", T->data); // 输出节点数据
preOrderTraverse(T->lchild); // 遍历左子树
preOrderTraverse(T->rchild); // 遍历右子树
}
void inOrderTraverse(BiTree T) {
if (T == NULL) {
return;
}
inOrderTraverse(T->lchild); // 遍历左子树
printf("%c ", T->data); // 输出节点数据
inOrderTraverse(T->rchild); // 遍历右子树
}
void postOrderTraverse(BiTree T) {
if (T == NULL) {
return;
}
postOrderTraverse(T->lchild); // 遍历左子树
postOrderTraverse(T->rchild); // 遍历右子树
printf("%c ", T->data); // 输出节点数据
}
```
最后,我们可以在主函数中调用这些函数:
```c
int main() {
BiTree T;
printf("请输入二叉树的节点信息(以 # 表示空节点):\n");
createBiTree(&T);
printf("先序遍历结果为:");
preOrderTraverse(T); printf("\n");
printf("中序遍历结果为:");
inOrderTraverse(T); printf("\n");
printf("后序遍历结果为:");
postOrderTraverse(T); printf("\n");
return 0;
}
```
这样,就可以实现用 C 建立二叉树,并通过调用函数输出先序遍历、中序遍历和后序遍历的结果了。希望这个答案能够帮到您。
阅读全文