能帮我用c++写一段中序遍历用顺序结构存储的二叉树的代码吗
时间: 2023-06-08 14:06:00 浏览: 107
当然可以!下面是中序遍历用顺序结构存储的二叉树的代码:
```c
#include <stdio.h>
#define MAX_TREE_SIZE 100 //二叉树的最大节点数
typedef struct{
char data; //节点数据
int parent; //节点的父节点下标
} PTNode;
typedef struct{
PTNode nodes[MAX_TREE_SIZE]; //节点数组
int n; //节点数
} PTree;
//创建一棵二叉树
void createPTree(PTree *T, int n){
T->n = n;
for(int i = 0; i < n; i++){
printf("请输入第%d个节点的数据:", i + 1);
scanf(" %c", &T->nodes[i].data);
T->nodes[i].parent = -1;
}
for(int i = 1; i < n; i++){
int parent;
printf("请输入节点%c的父节点下标(根节点下标为0):", T->nodes[i].data);
scanf("%d", &parent);
T->nodes[i].parent = parent;
}
}
//中序遍历顺序存储的二叉树
void inorderTraversal(PTree T, int i){
if(i >= T.n){ //i越界,直接返回
return;
}
int lchild = i * 2 + 1; //左孩子下标
int rchild = i * 2 + 2; //右孩子下标
inorderTraversal(T, lchild); //遍历左子树
printf("%c ", T.nodes[i].data); //访问节点
inorderTraversal(T, rchild); //遍历右子树
}
int main(){
int n; //节点数
printf("请输入节点数:");
scanf("%d", &n);
PTree T;
createPTree(&T, n);
printf("中序遍历结果为:\n");
inorderTraversal(T, 0);
}
```
关于代码的说明:
这是一个使用顺序存储方式实现的二叉树,其中 `PTNode` 结构体定义了二叉树的节点,包括节点的数据和父节点的下标;`PTree` 结构体定义了二叉树,包括节点数组 `nodes` 和节点数 `n`。在程序中,先通过 `createPTree` 函数创建二叉树,然后通过 `inorderTraversal` 函数进行中序遍历,最后输出遍历结果。
阅读全文