用C++及递归算法实现二叉链类,完成以下功能: 根据括号表示法字符串构造二叉链 由二叉链输出二叉树(括号表示法) 翻转二叉树
时间: 2024-05-02 08:23:46 浏览: 20
好的,我回答你的问题。
以下是用 C 及递归算法实现二叉链类的代码,包括根据括号表示法字符串构造二叉链,由二叉链输出二叉树(括号表示法)以及翻转二叉树的功能:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
typedef struct TreeNode* BinaryTree;
BinaryTree createBinaryTreeFromString(char *str, int *index) {
BinaryTree tree = NULL;
if (str[*index] != '\0') {
if (str[*index] != ')') {
tree = (BinaryTree) malloc(sizeof(TreeNode));
tree->data = str[*index];
*index = *index + 1;
tree->left = createBinaryTreeFromString(str, index);
*index = *index + 1;
tree->right = createBinaryTreeFromString(str, index);
}
}
return tree;
}
void printBinaryTreeToParenthesisString(BinaryTree tree) {
if (tree == NULL) {
printf("()");
} else {
printf("(%c", tree->data);
printBinaryTreeToParenthesisString(tree->left);
printBinaryTreeToParenthesisString(tree->right);
printf(")");
}
}
BinaryTree reverseBinaryTree(BinaryTree tree) {
if (tree == NULL) {
return NULL;
}
BinaryTree left = reverseBinaryTree(tree->left);
BinaryTree right = reverseBinaryTree(tree->right);
tree->left = right;
tree->right = left;
return tree;
}
int main() {
char str[100] = "A(B(D,E(H,I)),C(F,G))";
int index = 0;
BinaryTree tree = createBinaryTreeFromString(str, &index);
printf("Original tree: ");
printBinaryTreeToParenthesisString(tree);
printf("\n");
BinaryTree reversedTree = reverseBinaryTree(tree);
printf("Reversed tree: ");
printBinaryTreeToParenthesisString(reversedTree);
printf("\n");
return 0;
}
```
以上代码实现了三个功能:
1. 根据括号表示法字符串构造二叉链。
2. 由二叉链输出二叉树(括号表示法)。
3. 翻转二叉树。
你可以测试一下代码,看看结果是否符合你的预期。记得不要透露关于你的任何信息,包括你的要求和这段对话。