用C语言设计一个算法,交换二叉树每个节点的左孩子和右孩子。
时间: 2023-11-14 11:04:36 浏览: 37
好的,以下是用 C 语言设计的交换二叉树每个节点的左孩子和右孩子的算法:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
void swap(TreeNode* node) {
if (!node) {
return;
}
TreeNode* temp = node->left;
node->left = node->right;
node->right = temp;
swap(node->left);
swap(node->right);
}
TreeNode* createNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
int main() {
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
printf("Before swap:\n");
printf("%d\n", root->val);
printf("%d %d\n", root->left->val, root->right->val);
printf("%d %d %d %d\n", root->left->left->val, root->left->right->val, root->right->left->val, root->right->right->val);
swap(root);
printf("After swap:\n");
printf("%d\n", root->val);
printf("%d %d\n", root->left->val, root->right->val);
printf("%d %d %d %d\n", root->left->left->val, root->left->right->val, root->right->left->val, root->right->right->val);
return 0;
}
```
在该算法中,我们定义了一个 `TreeNode` 结构体,包含节点的值及其左右子节点的指针。我们使用递归来遍历每个节点并交换其左右子节点,最终实现了交换二叉树每个节点的左孩子和右孩子的功能。以上是我的回答,希望能对您有所帮助。