编写递归算法,将二叉树中所有结点的左、右子树相互交换。用C语言写
时间: 2024-12-20 10:23:30 浏览: 16
编写一个将二叉树中每个结点的左右孩子交换的算法。
在C语言中,编写递归算法来交换二叉树中每个节点的左右子树可以分为两个部分:首先定义结构体表示二叉树节点,然后定义一个递归函数来进行操作。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 交换左右子树的辅助函数
void swapChildren(TreeNode* node) {
if (node == NULL) return; // 递归基础条件:空节点不需要交换
TreeNode* temp = node->left; // 临时存储左孩子
node->left = node->right; // 将原右孩子赋值给左
node->right = temp; // 将临时存储的左孩子赋值给右
}
// 递归遍历并交换二叉树的左右子树
void swapTree(TreeNode** root) {
if (*root != NULL) { // 如果根节点存在
swapChildren(*root); // 先交换根节点的左右
swapTree(&(*root)->left); // 递归处理左子树
swapTree(&(*root)->right); // 递归处理右子树
}
}
// 示例:创建一个二叉树
TreeNode* createBinaryTree(int arr[], int n) {
// ... 你可以在这里实现一个创建二叉树的函数,用数组arr构建
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
TreeNode* root = createBinaryTree(arr, n);
swapTree(&root);
// 打印交换后的二叉树
// ... 你需要添加打印二叉树的代码
return 0;
}
```
在这个例子中,`swapChildren` 函数负责实际的交换操作,而 `swapTree` 使用递归来处理整个树。注意,这只是一个基本的框架,你需要根据实际情况完善创建二叉树和打印二叉树的部分。
阅读全文