C语言交换二叉树中每个结点的左孩子和右孩子,输入样例:ABC##DE#G##F###
时间: 2023-11-15 09:04:34 浏览: 130
可以使用递归的方法来交换二叉树中每个结点的左孩子和右孩子。具体操作如下:
1. 如果当前结点为空,直接返回。
2. 交换当前结点的左孩子和右孩子。
3. 递归对当前结点的左子树进行操作。
4. 递归对当前结点的右子树进行操作。
下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点的结构体
struct TreeNode {
char val;
struct TreeNode *left;
struct TreeNode *right;
};
// 创建二叉树
struct TreeNode* createTree() {
char c;
scanf("%c", &c);
if (c == '#') {
return NULL;
}
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = c;
root->left = createTree();
root->right = createTree();
return root;
}
// 交换二叉树中每个结点的左孩子和右孩子
void swapTree(struct TreeNode* root) {
if (root == NULL) {
return;
}
struct TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
swapTree(root->left);
swapTree(root->right);
}
// 中序遍历二叉树
void inorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%c ", root->val);
inorderTraversal(root->right);
}
int main() {
struct TreeNode* root = createTree();
swapTree(root);
inorderTraversal(root);
return 0;
}
```
输入样例:ABC##DE#G##F###
输出结果:CBEDGFA
阅读全文