用c语言完整代码写出采用二叉链表存储结构,交换二叉树中每个结点的左孩子和右孩子。
时间: 2023-08-31 21:32:46 浏览: 93
编写算法交换二叉树中所有结点的左右子树.doc
5星 · 资源好评率100%
### 回答1:
以下是用C语言编写的完整代码,实现交换二叉树中每个结点的左孩子和右孩子:
```c
#include <stdio.h>
#include <stdlib.h>
/* 定义二叉树结点 */
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
/* 创建二叉树 */
TreeNode* createBinaryTree() {
int val;
scanf("%d", &val);
if (val == -1) { // 输入-1表示空结点
return NULL;
}
TreeNode* root = (TreeNode*) malloc(sizeof(TreeNode));
root->val = val;
root->left = createBinaryTree(); // 递归创建左子树
root->right = createBinaryTree(); // 递归创建右子树
return root;
}
/* 交换二叉树中每个结点的左孩子和右孩子 */
void swapBinaryTree(TreeNode* root) {
if (root == NULL) {
return;
}
TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
swapBinaryTree(root->left); // 递归交换左子树
swapBinaryTree(root->right); // 递归交换右子树
}
/* 中序遍历二叉树 */
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left); // 递归遍历左子树
printf("%d ", root->val);
inorderTraversal(root->right); // 递归遍历右子树
}
int main() {
printf("请输入二叉树的结点,-1表示空结点:\n");
TreeNode* root = createBinaryTree();
printf("交换前二叉树的中序遍历结果为:\n");
inorderTraversal(root);
printf("\n");
swapBinaryTree(root);
printf("交换后二叉树的中序遍历结果为:\n");
inorderTraversal(root);
printf("\n");
return 0;
}
```
在上述代码中,我们首先定义了二叉树结点的数据结构,并且使用 `createBinaryTree()` 函数递归创建二叉树。接着,我们使用 `swapBinaryTree()` 函数递归交换二叉树中每个结点的左孩子和右孩子。最后,我们使用 `inorderTraversal()` 函数中序遍历二叉树,以验证交换结果是否正确。
### 回答2:
以下是一个使用C语言编写的代码示例,表示交换二叉树中每个结点的左孩子和右孩子:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
};
// 创建新结点
struct TreeNode* createNode(int data) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 交换二叉树中每个结点的左孩子和右孩子
void swapChildren(struct TreeNode* root) {
if (root == NULL) {
return;
}
struct TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
swapChildren(root->left);
swapChildren(root->right);
}
// 先序遍历二叉树
void preOrderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->data);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
int main() {
// 创建二叉树
struct TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 交换二叉树中每个结点的左孩子和右孩子
swapChildren(root);
// 先序遍历二叉树,检查交换结果
preOrderTraversal(root);
return 0;
}
```
这段代码使用二叉链表存储结构表示二叉树,并通过递归的方式交换二叉树中每个节点的左孩子和右孩子。最后,通过先序遍历的方式输出交换后的二叉树结果。
### 回答3:
以下是使用C语言完整代码实现交换二叉树中每个节点的左孩子和右孩子的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 交换二叉树中每个节点的左孩子和右孩子
void swapChildren(TreeNode* root) {
if (root == NULL) {
return;
}
// 交换左右孩子节点
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
// 递归地交换左子树
swapChildren(root->left);
// 递归地交换右子树
swapChildren(root->right);
}
// 中序遍历二叉树
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%d ", root->data);
inorderTraversal(root->right);
}
int main() {
// 创建二叉树
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 交换二叉树中每个节点的左孩子和右孩子
swapChildren(root);
// 打印交换后的二叉树中序遍历结果
printf("交换后的二叉树中序遍历结果为:");
inorderTraversal(root);
printf("\n");
// 释放二叉树内存
free(root->left->left);
free(root->left->right);
free(root->left);
free(root->right);
free(root);
return 0;
}
```
运行这段代码将会输出交换后的二叉树的中序遍历结果。
阅读全文