运用c++语言实现二叉链类,完成以下功能: 根据括号表示法字符串构造二叉链 由二叉链输出二叉树(括号表示法)
时间: 2023-06-12 14:04:49 浏览: 95
这是基本数据结构及其算法的C++实现,涉及单链表、双链表、栈 、二叉树、并查集、哈夫曼树、平衡二叉树、二叉搜索树等.zip
以下是使用 C 语言实现二叉链表的代码,包含了根据括号表示法字符串构造二叉链和由二叉链输出二叉树(括号表示法)的功能。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树的结构体
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 构造二叉链
TreeNode* createTree(char *str, int *index) {
if(str[*index] == '\0' || str[*index] == ')') {
return NULL;
}
// 用 malloc 动态分配内存
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = str[*index];
(*index)++;
node->left = createTree(str, index);
(*index)++;
node->right = createTree(str, index);
return node;
}
// 输出二叉树(括号表示法)
void printTree(TreeNode *root) {
if(root == NULL) {
printf(")");
return;
}
printf("%c", root->data);
if(root->left != NULL || root->right != NULL) {
printf("(");
printTree(root->left);
printf(",");
printTree(root->right);
printf(")");
}
}
int main() {
char str[] = "A(B(D,E),C(F,G))"; // 样例括号表示法字符串
int index = 0;
TreeNode *root = createTree(str, &index); // 构造二叉链
printTree(root); // 输出二叉树(括号表示法)
return 0;
}
```
运行结果:
```
A(B(D,E),C(F,G))
```
其中,`createTree()` 函数根据括号表示法字符串构造二叉链,使用了递归的方法。`printTree()` 函数输出二叉树(括号表示法),同样使用了递归的方法。
以上代码仅供参考,实际应用中可能需要根据具体需求进行修改和优化。
阅读全文