交换二叉树的左右子树的C语言具体代码
时间: 2024-10-09 08:07:58 浏览: 45
二叉树左右子树交换(数据结构)
5星 · 资源好评率100%
在C语言中,你可以通过递归的方式来实现交换二叉树的左右子树。这里是一个简单的示例代码,它展示了如何遍历二叉树并将所有节点的左子树和右子树交换:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 交换左右子树
void swapTreeNodes(TreeNode **node) {
if (*node != NULL) {
// 交换当前节点的左右子树
TreeNode* temp = (*node)->left;
(*node)->left = (*node)->right;
(*node)->right = temp;
// 递归交换左、右子树
swapTreeNodes(&(*node)->left);
swapTreeNodes(&(*node)->right);
}
}
// 创建一个新的二叉树节点
TreeNode* newNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 测试函数,创建一个二叉树并打印交换前后的结果
int main() {
TreeNode *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
printf("Original Tree:\n");
inorderTraversal(root);
swapTreeNodes(&root); // 调用交换函数
printf("\nSwapped Tree:\n");
inorderTraversal(root);
return 0;
}
// 中序遍历用于打印节点值
void inorderTraversal(TreeNode *root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
}
阅读全文