编写算法c语言,交换二叉树中所有结点的左右子树。
时间: 2023-06-11 17:04:15 浏览: 121
好的,以下是一个简单的程序代码,可以实现交换二叉树中所有节点的左右子树:
```
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* invertTree(struct TreeNode* root){
if (root == NULL) return NULL;
struct TreeNode *left = root->left;
root->left = invertTree(root->right);
root->right = invertTree(left);
return root;
}
```
这个程序采用了递归的方式,从上到下进行交换。首先判断当前节点是不是 NULL,如果是就返回 NULL。然后交换当前节点的左右子树,最后返回根节点。
相关问题
c语言 编写算法 以二叉链表存储的二叉树中交换二叉树各结点的左右子树
可以按照以下步骤编写算法:
1. 定义二叉树结点的结构体,包含数据域、左子树指针和右子树指针。
```c
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
}TreeNode;
```
2. 定义交换左右子树的函数,函数接受一个二叉树的根节点指针作为参数。
```c
void swap(TreeNode* root) {
if (root == NULL) {
return;
}
// 交换左右子树
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
// 递归交换左右子树
swap(root->left);
swap(root->right);
}
```
3. 测试函数。
```c
int main() {
// 构造二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->data = 2;
root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->left->data = 4;
root->left->left->left = NULL;
root->left->left->right = NULL;
root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
root->left->right->data = 5;
root->left->right->left = NULL;
root->left->right->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->data = 3;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->data = 6;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right->data = 7;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 交换左右子树
swap(root);
// 遍历交换后的二叉树
printf("Inorder traversal of the swapped binary tree is: ");
inorder(root);
printf("\n");
return 0;
}
```
完整代码如下:
用c语言编写已知二叉树采用二叉链表存储结构,设计一个算法,使二叉树中所有结点的左右子树相互交换
好的,您所提出的问题是:如何用c语言编写已知二叉树采用二叉链表存储结构,设计一个算法,使二叉树中所有结点的左右子树相互交换。
以下是该问题的算法实现:
```
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
void swap(struct TreeNode* root) {
if (root == NULL) return;
struct TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
swap(root->left);
swap(root->right);
}
```
解释:从根节点开始遍历每个节点,对于每个节点,交换其左右子树。然后递归地对其左右子节点执行相同的操作。最终,整棵二叉树中的每个节点的左右子树都被交换。
阅读全文