C语言交换二叉树中每个结点的左孩子和右孩子,输入样例:ABC##DE#G##F###,输出有两行:第一行是原二叉树的中序遍历序列,第二行是交换后的二叉树的中序遍历序列
时间: 2023-11-14 19:06:17 浏览: 82
Learning-fsharp:学习F#书
以下是C语言的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树的结构体定义
typedef struct Node {
char data;
struct Node *left;
struct Node *right;
} Node, *Tree;
// 创建二叉树
void createTree(Tree *root) {
char ch = getchar();
if (ch == '#') {
*root = NULL;
} else {
*root = (Node *)malloc(sizeof(Node));
(*root)->data = ch;
createTree(&((*root)->left));
createTree(&((*root)->right));
}
}
// 交换二叉树中每个结点的左孩子和右孩子
void swapTree(Tree root) {
if (root != NULL) {
// 交换左子树和右子树
Tree temp = root->left;
root->left = root->right;
root->right = temp;
// 递归交换左子树和右子树
swapTree(root->left);
swapTree(root->right);
}
}
// 中序遍历二叉树
void inorderTraversal(Tree root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%c", root->data);
inorderTraversal(root->right);
}
}
int main() {
Tree root = NULL;
printf("请输入二叉树的先序遍历序列:");
createTree(&root);
printf("原二叉树的中序遍历序列为:");
inorderTraversal(root);
printf("\n");
swapTree(root);
printf("交换后的二叉树的中序遍历序列为:");
inorderTraversal(root);
printf("\n");
return 0;
}
```
使用样例:
```
请输入二叉树的先序遍历序列:ABC##DE#G##F###
原二叉树的中序遍历序列为:CBEDGAF
交换后的二叉树的中序遍历序列为:CBEGDAF
```
阅读全文