c语言编写数据结构程序题:实现二叉树中所有结点的左、右子树相互交换。请给出详细步骤和注明以及完整代码
时间: 2024-11-09 16:24:12 浏览: 21
题目:编写递归算法,将二叉树中所有结点的左右子树相互交换 - READ.doc
5星 · 资源好评率100%
要实现二叉树中所有节点的左子树与右子树的交换,我们可以创建一个递归函数来遍历整个二叉树并交换每个节点的左右子节点。这里我们使用的是二叉树的链式存储结构[^1]。
以下是C语言的一个可能实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = data;
newNode->left = newNode->right = NULL;
}
return newNode;
}
// 交换左子树和右子树
void swapChildren(Node** node) {
if (*node != NULL) {
Node temp = *node->left;
*node->left = *node->right;
*node->right = temp;
// 递归地交换子节点
swapChildren(&(*node)->left);
swapChildren(&(*node)->right);
}
}
// 中序遍历打印节点以验证交换结果
void inOrderTraversal(Node* root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%d ", root->data);
inOrderTraversal(root->right);
}
}
int main() {
// 假设有一个已经建立好的二叉树
Node* root = createNode(1);
// ...在这里添加其他节点...
// 调用函数交换节点
swapChildren(&root);
// 打印交换后的二叉树
printf("After swapping:\n");
inOrderTraversal(root);
return 0;
}
```
在这个代码中,`swapChildren()` 函数接受指向节点的指针,并通过递归方式遍历左子树和右子树,交换它们的位置。`inOrderTraversal()` 函数用于验证交换操作后的二叉树是否按预期工作。
阅读全文