假设二叉树中每个结点所含数据元素均为单字母,以二叉链表为存储结构,试编写算法按如图所示的树状显示二叉树。 图 二叉树的树有树状输出示意图
时间: 2024-12-08 07:24:13 浏览: 10
为了实现二叉树的树状显示,可以使用递归的方法来遍历二叉树,并在每个节点前添加适当数量的空格和连接符(如 `|` 和 `-`)以形成树状结构。以下是一个用 C 语言编写的示例算法:
```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 printTree(TreeNode *root, int level) {
if (root == NULL) return;
// 打印当前节点
for (int i = 0; i < level; i++) {
printf(" ");
}
printf("|--%c\n", root->data);
// 递归打印左子树和右子树
if (root->left || root->right) {
if (root->left) {
printTree(root->left, level + 1);
} else {
for (int i = 0; i <= level; i++) {
printf(" ");
}
printf("|-- \n");
}
if (root->right) {
printTree(root->right, level + 1);
} else {
for (int i = 0; i <= level; i++) {
printf(" ");
}
printf("|-- \n");
}
}
}
// 主函数
int main() {
// 构建示例二叉树
TreeNode *root = createNode('A');
root->left = createNode('B');
root->right = createNode('C');
root->left->left = createNode('D');
root->left->right = createNode('E');
root->right->left = createNode('F');
// 打印二叉树
printTree(root, 0);
return 0;
}
```
### 解释
1. **定义节点结构**:定义了一个 `TreeNode` 结构体,包含一个字符数据 `data` 和两个指向左右子节点的指针。
2. **创建节点**:`createNode` 函数用于创建一个新的二叉树节点。
3. **树状显示**:`printTree` 函数通过递归的方式遍历二叉树,并在每个节点前添加适当数量的空格和连接符,形成树状结构。
4. **主函数**:构建一个示例二叉树并调用 `printTree` 函数进行显示。
这个算法可以根据需要调整格式和样式,以适应不同的显示需求。
阅读全文