用C语言编写一个函数,实现将二叉树所有结点的左右子树进行互换
时间: 2024-11-10 18:26:37 浏览: 30
编写算法交换二叉树中所有结点的左右子树.doc
5星 · 资源好评率100%
在C语言中,我们可以创建一个递归函数来实现二叉树节点的左右子树互换。这里假设我们有一个结构体`TreeNode`表示二叉树的节点,它有两个指针`left`和`right`分别指向左子节点和右子节点。
```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) { // 如果节点存在
TreeNode* temp = (*node)->left; // 临时保存左子节点
(*node)->left = (*node)->right; // 将右子节点赋给左子节点
(*node)->right = temp; // 将临时存储的左子节点赋给右子节点
swapChildren(&(*node)->left); // 递归处理左子树
swapChildren(&(*node)->right); // 递归处理右子树
}
}
// 创建一个新的二叉树节点
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = newNode->right = NULL;
return newNode;
}
int main() {
// 初始化二叉树...
TreeNode* root = ...; // 根节点
swapChildren(&root); // 调用函数互换根节点的左右子树
// 打印交换后的二叉树...
return 0;
}
```
在这个例子中,`swapChildren`函数通过递归遍历每个节点并交换其左右子节点,实现了二叉树的左右子树互换。请注意,在实际应用中,你需要先初始化二叉树,并在主函数中提供具体的根节点。
阅读全文