用顺序存储结构来存储一颗具有n个结点的二叉树,编写算法实现对该二叉树进行先序遍历,输出先序遍历序列。
时间: 2023-06-16 21:02:29 浏览: 51
假设二叉树的结点结构体为:
```c++
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
```
则先序遍历算法可以写成:
```c++
void PreOrderTraverse(BiTree T) {
if (T == NULL) {
return;
}
printf("%c ", T->data); // 输出结点的值
PreOrderTraverse(T->lchild); // 遍历左子树
PreOrderTraverse(T->rchild); // 遍历右子树
}
```
对于顺序存储结构,可以按照完全二叉树的方式存储二叉树,即按照从上到下,从左到右的顺序依次存储二叉树的结点。假设存储数组为`char a[]`,则第i个结点的左孩子结点为`a[2*i]`,右孩子结点为`a[2*i+1]`。
则可以按照如下方式进行先序遍历:
```c++
void PreOrderTraverse(char a[], int i, int n) {
if (i > n || a[i] == '#') {
return;
}
printf("%c ", a[i]); // 输出结点的值
PreOrderTraverse(a, 2*i, n); // 遍历左子树
PreOrderTraverse(a, 2*i+1, n); // 遍历右子树
}
```
其中,`i`表示当前结点在数组中的下标,`n`表示数组长度。
阅读全文