用c语言编写一个程序,要求是采用二叉链表存储结构,交换二叉树中每个结点的左孩子和右孩子。
时间: 2023-11-14 20:06:48 浏览: 80
编写算法交换二叉树中所有结点的左右子树.doc
5星 · 资源好评率100%
以下是用C语言编写的交换二叉树中每个结点的左孩子和右孩子的程序,采用二叉链表存储结构:
```c
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *left;
struct node *right;
};
struct node* create_node(int data) {
struct node* new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = data;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
struct node* create_binary_tree() {
struct node* root = create_node(1);
root->left = create_node(2);
root->right = create_node(3);
root->left->left = create_node(4);
root->left->right = create_node(5);
root->right->left = create_node(6);
root->right->right = create_node(7);
return root;
}
void swap(struct node* root) {
if(root == NULL) {
return;
}
struct node* temp = root->left;
root->left = root->right;
root->right = temp;
swap(root->left);
swap(root->right);
}
void inorder_traversal(struct node* root) {
if(root == NULL) {
return;
}
inorder_traversal(root->left);
printf("%d ", root->data);
inorder_traversal(root->right);
}
int main() {
struct node* root = create_binary_tree();
printf("Inorder traversal before swapping: \n");
inorder_traversal(root);
printf("\n");
swap(root);
printf("Inorder traversal after swapping: \n");
inorder_traversal(root);
printf("\n");
return 0;
}
```
这个程序首先定义了一个二叉树的结点,包括结点的数据,以及左子树和右子树的指针。接着定义了创建结点和创建二叉树的函数,采用了递归的方式。然后定义了一个交换左右子树的函数,采用了递归的方式。最后定义了一个中序遍历的函数,用于输出交换后的二叉树。
在程序的主函数中,先创建了一个二叉树,并输出了交换前的中序遍历结果。然后调用了交换函数,交换了每个结点的左孩子和右孩子。最后输出了交换后的中序遍历结果。
阅读全文