静态建立一棵如图8-1的二叉树,并使用递归写出其对应的先序遍历算法。
时间: 2024-12-18 14:35:47 浏览: 7
### 实验要求
#### 静态建立二叉树
首先,我们需要静态建立一棵如图8-1所示的二叉树。根据图8-1,我们可以确定以下结点及其关系:
- 根结点:A
- A的左子树根结点:B
- B的左子树根结点:D
- A的右子树根结点:C
- C的左子树根结点:E
- C的右子树根结点:F
接下来,我们创建这些结点并将其连接起来。
#### 先序遍历算法
先序遍历的步骤如下:
1. 访问根结点。
2. 递归地先序遍历左子树。
3. 递归地先序遍历右子树。
下面是具体的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点结构体
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的二叉树结点
TreeNode* createNode(char data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 递归先序遍历二叉树
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%c ", root->data); // 访问根结点
preOrderTraversal(root->left); // 递归遍历左子树
preOrderTraversal(root->right); // 递归遍历右子树
}
}
int main() {
// 静态建立二叉树
TreeNode* A = createNode('A');
TreeNode* B = createNode('B');
TreeNode* D = createNode('D');
TreeNode* C = createNode('C');
TreeNode* E = createNode('E');
TreeNode* F = createNode('F');
// 连接结点
A->left = B;
A->right = C;
B->left = D;
C->left = E;
C->right = F;
// 先序遍历二叉树
printf("Pre-order traversal: ");
preOrderTraversal(A);
printf("\n");
return 0;
}
```
### 输出结果
运行上述程序,输出结果应为:
```
Pre-order traversal: A B D C E F
```
这个结果符合先序遍历的顺序:A、B、D、C、E、F。
阅读全文