用C语言编写,在整数元素的二叉树中编程实现链式存储结构上交换二叉树中所有左、右子树的算
时间: 2024-10-28 21:11:47 浏览: 26
C语言实现找出二叉树中某个值的所有路径的方法
在C语言中,要在整数元素的二叉树中使用链式存储结构交换每个节点的左右子树,你需要首先定义一个二叉树节点的数据结构,并包含指向左右子节点的指针。接下来,你可以编写一个递归函数来进行这个操作。这里是一个简化版的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 辅助函数,用于交换两个节点的左右子树
void swapChildren(TreeNode** root) {
if (*root == NULL) return; // 如果为空则直接返回
// 交换当前节点的左右子树
TreeNode* temp = (*root)->left;
(*root)->left = (*root)->right;
(*root)->right = temp;
// 递归交换左子树和右子树
swapChildren(&(*root)->left);
swapChildren(&(*root)->right);
}
// 主函数示例,创建并交换二叉树的节点
TreeNode* createTree() {
// 创建并初始化你的二叉树...
}
int main() {
TreeNode* root = createTree();
// 先备份原始根节点
TreeNode* originalRoot = root;
printf("Before swapping:\n");
inorderTraversal(root); // 遍历原二叉树展示结果
// 调用函数交换左右子树
swapChildren(&root);
printf("\nAfter swapping:\n");
inorderTraversal(root); // 再次遍历验证交换后的效果
// 如果需要恢复原始状态,可以将root置回originalRoot
root = originalRoot;
return 0;
}
// 中序遍历辅助函数,用于打印节点值
void inorderTraversal(TreeNode* node) {
if (node != NULL) {
inorderTraversal(node->left);
printf("%d ", node->val);
inorderTraversal(node->right);
}
}
```
阅读全文